【问题标题】:OpenCV Mat to alglib real 2d Array conversionOpenCV Mat 到 alglib 真实二维数组的转换
【发布时间】: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


    【解决方案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 包含自变量。 last 列将包含班级编号(从 0 到 nclasses-1)。小数值四舍五入到最接近的整数。

    • npoints 是训练集大小 (&gt;=1)。
    • nvars 是自变量的数量 (&gt;=1)。
    • nclasses 必须 >1 才能进行分类。
    • ntrees 是森林中的树木数量 (&gt;=1)。
    • r 是用于构建单个树的训练集的百分比 (0 &lt; R &lt;= 1)。

    其余参数为输出参数。如有问题请查看info:

    • info 返回码:
      • -2,如果有一个点的类号在[0..nclasses-1]之外。
      • -1,如果传递了不正确的参数(npoints&lt;1nvars&lt;1nclasses&lt;1ntrees&lt;1r&lt;=0r&gt;1)。
      • 1,如果任务已解决。

    【讨论】:

    • 感谢 manlio 的回复。我已经这样做了。而我设置的其他参数为 alglib::dfbuildrandomdecisionforest(matrix, 28539, 96,7, 80, 0.66, info, df, rep);但仍然没有建立模型。我还检查了矩阵中包含的数据,这也是正确的。你能建议我做错什么吗(比如将参数传递给随机森林)
    • 您检查过info 输出参数的值吗?返回码应为 1。matrix 的最后一列也必须包含类号(在您的情况下为 0 到 6)。
    • 我检查了信息的输出,它是-1,这意味着参数有问题。让我告诉你一些细节......矩阵包含训练数据,最后一列是类标签。其他参数如 alglib::dfbuildrandomdecisionforest(matrix, 28539, 96,7, 80, 0.66, info, df, rep);
    • 我使用的总课程是 7 个(面部的 7 个部分,即鼻子、嘴巴、头发等)
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2014-10-21
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多