如何将Opencv Mat转换为Alglib真正的2D数组?
下面是我被塞进的一个例子
Mat Col(28539,97,CV_32F);为了训练分类器,我想把这个Mat转换成real_2d_array算法。
发布于 2014-09-27 13:20:26
Mat Col(28539, 97, CV_32F);是一个OpenCV二维(28539行,97列)密集浮点(CV_32F =浮点)数组.
算法库几乎等价的数据类型是
// 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)。
https://stackoverflow.com/questions/26058036
复制相似问题