2015-01-25 4 views
0

Мне нужно вычислить облако точек из стереоизображений после вычисления их карты несоответствия. Вы можете найти код на http://goo.gl/enM7i1ошибка с типом входного массива в аргументе 6 stereoRectify()

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

Благодаря

+0

Компилятор говорит вам, что тип, и то, что он действительно ожидает. Теперь вам нужно подумать о том, как конвертировать (а не бросить!) Ваш тип в ожидаемый. Или прочитайте ссылку, чтобы увидеть, действительно ли вы передаете правильные аргументы. –

+0

Не могли бы вы помочь мне с преобразованием – jpatravali

ответ

0

Я думаю, что я получил это после нескольких часов исследования. Ошибка была вызвана недействительной передачей ввода типа Eigen в 6-м 7-м аргументе.

SOLN является преобразование между типом матрицы Эйгеном в ЦВ :: тип 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);