【发布时间】:2014-09-26 11:01:22
【问题描述】:
如何将 Opencv Mat 转换为 Alglib 实二维数组?
这是一个我被卡住的例子
Mat Col(28539,97,CV_32F);
我想将此 Mat 转换为 alglib real_2d_array 以训练分类器。
【问题讨论】:
标签: c++ opencv data-conversion mat alglib
如何将 Opencv Mat 转换为 Alglib 实二维数组?
这是一个我被卡住的例子
Mat Col(28539,97,CV_32F);
我想将此 Mat 转换为 alglib real_2d_array 以训练分类器。
【问题讨论】:
标签: c++ opencv data-conversion mat alglib
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 包含自变量。 last 列将包含班级编号(从 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)。【讨论】:
info 输出参数的值吗?返回码应为 1。matrix 的最后一列也必须包含类号(在您的情况下为 0 到 6)。