如何将Opencv Mat转换为Alglib真实二维数组?
这是一个我被卡住的例子
Mat Col(28539,97,CV_32F);
我想将此 Mat
转换为 alglib real_2d_array
以训练分类器。
最佳答案
Mat Col(28539, 97, CV_32F);
是一个 OpenCV 二维(28539 行,97 列)密集浮点(CV_32F = float)数组。
alglib 几乎等价 datatype是
// bi-dimensional real (double precision) array
real_2d_array matrix;
Mat
中的数据布局与 real_2d_array
兼容(以及来自其他工具包和 SDK 的大多数密集数组类型)。
一个简单的转换方法是:
const int rows(28539);
const int columns(97);
matrix.setlength(rows, columns);
for (int i(0); i < rows; ++i)
for (int j(0); j < columns; ++j)
matrix(i, j) = Col.at<float>(i, j);
Mat::at
返回对指定数组元素的引用。
编辑
来自reference manual :
void alglib::dfbuildrandomdecisionforest(
real_2d_array xy,
ae_int_t npoints,
ae_int_t nvars,
ae_int_t nclasses,
ae_int_t ntrees,
double r,
ae_int_t& info,
decisionforest& df,
dfreport& rep);
xy
是训练集(行对应样本分量,列对应变量)。对于分类任务,第一个
nvars
的列包含自变量。 last 列将包含类号(从 0 到nclasses-1
)。小数值四舍五入为最接近的整数。-
npoints
是训练集大小 (>=1
)。 -
nvars
是自变量的数量 (>=1
)。 -
nclasses
必须 >1 才能分类。 -
ntrees
是森林中树木的数量 (>=1
)。 -
r
是用于构建单个树的训练集的百分比 (0 < R <= 1
)。
其余参数为输出参数。如果出现问题,您应该检查 info
:
-
info
返回码:- -2,如果点的类号在
[0..nclasses-1]
之外. - -1,如果传递了不正确的参数(
npoints<1
、nvars<1
、nclasses<1
、ntrees<1
、r<=0
或r>1
)。 - 1,如果任务已经解决。
- -2,如果点的类号在
关于c++ - OpenCV Mat 到 alglib 真正的二维数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058036/