Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 以下3个opencv Mat实例之间有什么区别?_C++_Opencv_Matrix - Fatal编程技术网

C++ 以下3个opencv Mat实例之间有什么区别?

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

在我的程序中,我需要一个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) = 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
a
Matx33d
吗?哦,我明白了,虽然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
a
Matx33d
?哦,我明白了,虽然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;