1

如何将 Opencv Mat 转换为 Alglib 真实二维数组?

这是一个我被卡住的例子

Mat Col(28539,97,CV_32F);

我想将其转换Mat为 alglibreal_2d_array以训练分类器。

4

1 回答 1

1
Mat Col(28539, 97, CV_32F);

是一个 OpenCV 二维(28539 行,97 列)密集浮点(CV_32F = float)数组。

alglib 几乎等效的数据类型

// bi-dimensional real (double precision) array
real_2d_array matrix;

中的数据布局Matreal_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返回码:
    • -2,如果有一个类号在 之外的点[0..nclasses-1]
    • -1,如果传递了不正确的参数(、npoints<1nvars<1nclasses<1ntrees<1)。r<=0r>1
    • 1,如果任务已经解决。
于 2014-09-27T13:20:26.387 回答