如何使用float数组中的数据初始化cv :: Mat

Bre*_*ett 15 c++ arrays opencv matrix

我需要创建一个cv::Mat使用float *数组中的数据初始化的变量.这应该是基本的,但我很难搞清楚.

我有代码:

float *matrixAB = <120 floating point array created elsewhere>;
cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, &matrixAB);
Run Code Online (Sandbox Code Playgroud)

但从cv_matrixAB不包含float值,更重要的是与包含的数据不匹配matrixAB.

如果我将行更改为:

cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, matrixAB);
Run Code Online (Sandbox Code Playgroud)

cv_matrixAB.data就是全部0.我也试过使用CV_64F类型,但我看到相同的行为.

任何人都可以帮我确定我哪里出错了吗?根据cv::Mat构造函数文档,我应该能够以float *数组的形式提供我的数据.

更新:这里有更多信息:即使以下代码也不起作用.的printf显示器63,这当然不是一个值dummy_query_data.

float dummy_query_data[10] = { 1, 2, 3, 4,
                               5, 6, 7, 8 };
cv::Mat dummy_query = cv::Mat(2, 4, CV_32F, dummy_query_data);
printf("%f\n", (float)dummy_query.data[3]);
Run Code Online (Sandbox Code Playgroud)

her*_*tao 27

你做的不错.但是你应该使用at<float>()而不是.data(它会给你uchar *)来访问mat元素.或者只是cout << mat;用来打印它的所有元素.它会给你预期的结果.

float dummy_query_data[10] = { 1, 2, 3, 4, 5, 6, 7, 8 };
cv::Mat dummy_query = cv::Mat(2, 4, CV_32F, dummy_query_data);

cout << dummy_query.at<float>(0,2) << endl;
cout << dummy_query << endl;
Run Code Online (Sandbox Code Playgroud)

它将输出:

3
[1, 2, 3, 4;
  5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

  • 请记住,没有数据被复制!因此,只要矩阵存在或使用`clone()`,您必须确保float数组生效. (5认同)