opencv中mat的赋值,以及类型匹配问题

cv::Mat的at(int,int)函数调用值时不具备C++的类型转换能力
并且在使用矩阵相乘时,不仅要保证行列对应,还要保证各个矩阵元素的类型一致
opencv的float类型为CV_32FC1,都把了类型为CV_64FC1

float m1[3][3]={1,2,3,4,5,6,7,8,9};
cv::Mat rotation(3,3,CV_32FC1,m1);

使用数组的方式对矩阵进行赋值,注意数组的值与矩阵定义的类型要对应上
要注意的是在调用时,如果矩阵元素类型是float,但是使用这行语句进行调用元素值,就会出错

cout<<rotation.at<double>(1,2);

输出了262144也就本来是float类型,强制转换成了double类型而出错

同样的像下列程序表示的,如果是double而转换成float输出,出现了结果为0的情况

double m1[3][3]={1,2,3,4,5,6,7,8,9};
	cv::Mat rotation(3,3,CV_64FC1,m1);
	cout<<rotation.at<float>(1,2);

以上可以得出,cv::Mat的at(int,int)函数调用值时不具备C++的类型转换能力

猜你喜欢

转载自blog.csdn.net/qq_34122731/article/details/92019606