如何将Opencv Mat转换为Alglib真正的2D数组?
这是一个我被困的例子
Mat Col(28539,97,CV_32F);
我想将此Mat
转换为alglib real_2d_array
以培训分类器。
答案 0 :(得分:1)
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
返回对指定数组元素的引用。
修改
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
包含独立变量。 最后列将包含类号(从0到nclasses-1
)。小数值四舍五入为最接近的整数。
npoints
是训练集大小(>=1
)。nvars
是自变量的数量(>=1
)。nclasses
必须> 1才能进行分类。ntrees
是林中树木的数量(>=1
)。r
是用于构建单个树的训练集的百分比(0 < R <= 1
)。其余参数是输出参数。如果出现问题,您应该检查info
:
info
返回代码:
[0..nclasses-1]
的点。npoints<1
,nvars<1
,nclasses<1
,ntrees<1
,r<=0
或r>1
)。< / LI>