OpenCV Mat to alglib real 2d Array转换

时间:2014-09-26 11:01:23

标签: c++ opencv data-conversion mat alglib

如何将Opencv Mat转换为Alglib真正的2D数组?

这是一个我被困的例子

Mat Col(28539,97,CV_32F);

我想将此Mat转换为alglib real_2d_array以培训分类器。

1 个答案:

答案 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返回对指定数组元素的引用。

修改

来自reference manual

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<1r<=0r>1)。< / LI>
    • 1,如果任务已经解决。