C++ 以下3个opencv Mat实例之间有什么区别?
在我的程序中,我需要一个3*3矩阵K(摄像机校准矩阵)和一个3*3矩阵F(基本矩阵)来计算E(基本矩阵):E=K.t()FK,但当我使用 cv::Matx33d K(518.0,0325.5, 0 ,519.0,253.5, 0 , 0, 1); 它产生错误:行中的“运算符*”不匹配: E=K.t()*F*K 但是当我使用C++ 以下3个opencv Mat实例之间有什么区别?,c++,opencv,matrix,C++,Opencv,Matrix,在我的程序中,我需要一个3*3矩阵K(摄像机校准矩阵)和一个3*3矩阵F(基本矩阵)来计算E(基本矩阵):E=K.t()FK,但当我使用 cv::Matx33d K(518.0,0325.5, 0 ,519.0,253.5, 0 , 0, 1); 它产生错误:行中的“运算符*”不匹配: E=K.t()*F*K 但是当我使用 cv::Mat K(3,3,CV_64FC1); //cannot be 32 (float) K.at<double>(0,0
cv::Mat K(3,3,CV_64FC1); //cannot be 32 (float)
K.at<double>(0,0) = 518.0;
K.at<double>(1,1) = 519.0;
K.at<double>(0,2) = 325.5;
K.at<double>(1,2) = 253.5;
K.at<double>(2,2) = 1;
cv::matk(3,3,cv_64FC1)//不能为32(浮动)
K.at(0,0)=518.0;
K.at(1,1)=519.0;
K.at(0,2)=325.5;
K.at(1,2)=253.5;
K.at(2,2)=1;
它是有效的,但是当我使用
cv::Mat_<double> K = ( cv::Mat_<double>(3, 3) <<
518.0, 0,325.5,
0 ,519.0,253.5,
0 , 0, 1);
在第二个版本中,您没有初始化矩阵元素,也没有全部设置它们
cv::Mat K(3,3,CV_64FC1); //cannot be 32 (float)
K.at<double>(0,0) = 518.0;
K.at<double>(1,1) = 519.0;
K.at<double>(0,2) = 325.5;
K.at<double>(1,2) = 253.5;
K.at<double>(2,2) = 1;
在第二个版本中,您没有初始化矩阵元素,也没有全部设置它们
cv::Mat K(3,3,CV_64FC1); //cannot be 32 (float)
K.at<double>(0,0) = 518.0;
K.at<double>(1,1) = 519.0;
K.at<double>(0,2) = 325.5;
K.at<double>(1,2) = 253.5;
K.at<double>(2,2) = 1;
非常感谢,这正是原因,但我的第一个版本有什么问题吗?cv::Matx33d K(518.00325.5,0,519.0253.5,0,0,0,1);谢谢!也是
F
aMatx33d
吗?哦,我明白了,虽然F是Mat,K和K.t()是Matx33d,所以我写的是cv::Mat_E=cv::Mat(K.t())F::Mat(K);这是对的!非常感谢!非常感谢,这正是原因,但我的第一个版本有什么问题吗?cv::Matx33dK(518.00325.5,0,519.0253.5,0,0,0,0,1);谢谢!也是F
aMatx33d
?哦,我明白了,虽然F是Mat,K和K.t()是Matx33d,所以我写的是cv::Mat_E=cv::Mat(K.t())F::Mat(K)是的,非常感谢!
cv::Mat K = cv::Mat::zeros(3,3,CV_64FC1); //cannot be 32 (float)
K.at<double>(0,0) = 518.0;
K.at<double>(1,1) = 519.0;
K.at<double>(0,2) = 325.5;
K.at<double>(1,2) = 253.5;
K.at<double>(2,2) = 1;