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

时间:2014-03-30 01:47:47

标签: 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);

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

如果我将该行更改为:

cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, matrixAB);

然后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]);

1 个答案:

答案 0 :(得分:26)

你做得很好。但是您应该使用at<float>()代替.data来访问mat元素(这将为您提供uchar *)。或者只需使用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;

将输出:

3
[1, 2, 3, 4;
  5, 6, 7, 8]