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);