C++ OpenCV Mat到alglib real 2d阵列的转换
如何将Opencv Mat转换为Alglib real 2D阵列 这是一个我被绊倒的例子C++ OpenCV Mat到alglib real 2d阵列的转换,c++,opencv,data-conversion,mat,alglib,C++,Opencv,Data Conversion,Mat,Alglib,如何将Opencv Mat转换为Alglib real 2D阵列 这是一个我被绊倒的例子 Mat Col(28539,97,CV_32F); 我想把这个Mat转换成alglibreal\u 2d\u数组来训练分类器 Mat Col(28539, 97, CV_32F); 是一个OpenCV二维(28539行,97列)密集浮点(CV_32F=float)数组 alglib几乎相当于 Mat中的数据布局与real_2d_array兼容(以及其他工具包和SDK中的大多数密集阵列类型) 转换的简单方
Mat Col(28539,97,CV_32F);
我想把这个Mat
转换成alglibreal\u 2d\u数组
来训练分类器
Mat Col(28539, 97, CV_32F);
是一个OpenCV二维(28539行,97列)密集浮点(CV_32F=float)数组
alglib几乎相当于
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);
是训练集(对应于样本组件的行和对应于变量的列) 对于分类任务,列的第一个xy
包含独立变量。最后一列将包含类号(从0到nvars
)。分数值四舍五入为最接近的整数nclasses-1
是训练集大小(npoints
)=1
是自变量的数量(nvars
)=1
必须大于1才能进行分类nclasses
是森林中的树数(ntrees
)=1
是用于构建单个树的训练集的百分比(r
输出参数的值?返回代码应为1。而且0
info
矩阵的最后一列必须包含类号(在您的情况下为0到6)。我检查了信息的输出,它是-1,这意味着参数有一些问题。让我告诉你一些细节…矩阵包含训练数据,最后一列是类标签。其他参数为alglib::dfbuildrandomdecisionforest(矩阵,28539,96,7,80,0.66,info,df,rep);我使用的类总数是7(脸的7个部位,即鼻子、嘴巴、头发等)
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);
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);