c++ - OpenCV Mat 到 alglib 真正的二维数组转换

标签 c++ opencv data-conversion mat alglib

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

这是一个我被卡住的例子

Mat Col(28539,97,CV_32F);

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

最佳答案

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的列包含自变量。 last 列将包含类号(从 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)。
    • 1,如果任务已经解决。

关于c++ - OpenCV Mat 到 alglib 真正的二维数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058036/

相关文章:

OpenCV正样本尺寸?

java - 尝试将二进制转换为十六进制时不一致地获得 NumberFormatException

java - 字符串中的前两个字节 : conversion behavior?

c++ - 如何在 tensorflow C/C++ 中输入和检索 LSTM 的状态

c++ - 使用 opencv 匹配一组图像中的图像,以便在 C++ 中进行识别

opencv - 如何像 Matlab 一样在 OpenCV 中设置具有特定值的整个矩阵

c++ - python opencv中是否支持BackgroundSubtractorMOG2

javascript - javascript中的字节数组到十六进制字符串的转换

c++ - 宏可以接受列表初始化作为参数吗?

c++ - 我怎样才能使这个简单的代码更有效而不每年重复 for 循环?