gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:33 25 4
gpt4 key购买 nike

如何将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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com