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++的类型转换能力