stereoRectify() 的参数 6 中的输入数组类型错误
error with input array type in argument 6 of stereoRectify()
我需要在计算视差图后从立体图像计算点云。
请在 http://goo.gl/enM7i1
找到代码
Mat R1, R2, Q
Eigen::Quaterniond q;
Eigen::Vector3d t;
Eigen::Matrix3d mR = q.matrix();
stereoRectify(left_K,left_D,right_K,right_D,disp.size(),mR,t,R1,R2,left_P,right_P,Q); }
我在编译时遇到这个错误:
invalid initialization of reference of type ‘cv::InputArray {aka const cv::_InputArray&}’ from expression of type ‘Eigen::Matrix3d {aka Eigen::Matrix<double, 3, 3>}’ stereoRectify(left_K,left_D,right_K,right_D,disp.size(),mR,t,R1,R2,left_P,right_P,Q);
^
谢谢
我想我经过数小时的研究得到了这个。错误是由于在第 6 个第 7 个参数中无效传递 Eigen 类型输入。
解决方案是 Eigen 类型矩阵到 cv::Mat 类型预期参数 (inputArray)
之间的转换
Mat R1, R2, Q;
Eigen::Quaterniond q = rots[0];
Eigen::Vector3d t = trans[0];
std::cout << q.matrix() << std::endl;
std::cout << t << std::endl;
// Converting Eigen type to Opencv type inputArray ---> Mat
Eigen::Matrix3d mR = q.matrix();
cv::Mat mr2 = cv::Mat::eye(3,3, CV_64F);
eigen2cv(mR, mr2);
cv::Mat T = cv::Mat::zeros(3,1,CV_64F);
T.at<double>(0,0) = t(0,0);
T.at<double>(0,1) = t(1,0);
T.at<double>(0,2) = t(2,0);
我需要在计算视差图后从立体图像计算点云。 请在 http://goo.gl/enM7i1
找到代码Mat R1, R2, Q
Eigen::Quaterniond q;
Eigen::Vector3d t;
Eigen::Matrix3d mR = q.matrix();
stereoRectify(left_K,left_D,right_K,right_D,disp.size(),mR,t,R1,R2,left_P,right_P,Q); }
我在编译时遇到这个错误:
invalid initialization of reference of type ‘cv::InputArray {aka const cv::_InputArray&}’ from expression of type ‘Eigen::Matrix3d {aka Eigen::Matrix<double, 3, 3>}’ stereoRectify(left_K,left_D,right_K,right_D,disp.size(),mR,t,R1,R2,left_P,right_P,Q);
^
谢谢
我想我经过数小时的研究得到了这个。错误是由于在第 6 个第 7 个参数中无效传递 Eigen 类型输入。
解决方案是 Eigen 类型矩阵到 cv::Mat 类型预期参数 (inputArray)
之间的转换Mat R1, R2, Q;
Eigen::Quaterniond q = rots[0];
Eigen::Vector3d t = trans[0];
std::cout << q.matrix() << std::endl;
std::cout << t << std::endl;
// Converting Eigen type to Opencv type inputArray ---> Mat
Eigen::Matrix3d mR = q.matrix();
cv::Mat mr2 = cv::Mat::eye(3,3, CV_64F);
eigen2cv(mR, mr2);
cv::Mat T = cv::Mat::zeros(3,1,CV_64F);
T.at<double>(0,0) = t(0,0);
T.at<double>(0,1) = t(1,0);
T.at<double>(0,2) = t(2,0);