C++ 如何使用浮点数组中的数据初始化cv::Mat
我需要创建一个C++ 如何使用浮点数组中的数据初始化cv::Mat,c++,arrays,opencv,matrix,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_矩阵ab.data都是0。我也尝试过使用CV_64F作为类型,但我看到了相同的行为 有人能帮我找出
cv::Mat
变量,该变量使用float*
数组中的数据进行初始化。
这应该是基本的,但我很难弄清楚
我有密码:
float *matrixAB = <120 floating point array created elsewhere>;
cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, &matrixAB);
然后cv_矩阵ab.data
都是0
。我也尝试过使用CV_64F
作为类型,但我看到了相同的行为
有人能帮我找出哪里出了问题吗?根据cv::Mat
构造函数文档,我应该能够以float*
数组的形式提供数据
更新:这里有更多信息:
即使下面的代码也不起作用。printf
显示63
,这当然不是dummy\u query\u 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]);
你做得很好。但是您应该使用
at()
而不是(这将为您提供uchar*
)来访问mat元素。或者简单地使用cout-Ah…这使它更简单。谢谢请记住,不会复制任何数据!因此,您必须确保浮点数组在矩阵存在的时间内有效,或者使用clone()
。
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]);
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]