我需要创建一个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
作为类型,但我看到相同的 behaivor。
谁能帮我确定哪里出了问题?根据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("%fn", (float)dummy_query.data[3]);
你做得很好。但是您应该使用 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]