2017-02-23 61 views
1

У меня есть проблемы запуска следующий код:Aruco Функция estimatePoseSingleMarkers() Ошибка

Mat cameraMatrix, distCoeffs; 
cameraMatrix = (Mat1f(3, 3) << 462.71, 0, 338.630, 0, 465.97, 177.780, 0, 0, 1); 
distCoeffs = (Mat1f(4, 1) << 0.133013, -0.322199, -0.001524, 0.004866); 
//skip 
Mat color(Size(color_information.width, color_information.height), CV_8UC3, (void*)color_data.planes[0], color_data.pitches[0]/sizeof(uchar)); 
Mat imageCopy; 
double tick = (double)getTickCount(); 
vector<int>ids; 
vector<vector<Point2f>>corners, rejected; 
vector<Mat>rvecs, tvecs; 
aruco::detectMarkers(color, dictionary, corners, ids, detectorParams, rejected); 
double currentTime = ((double)getTickCount() - tick)/getTickFrequency(); 

// draw results 
color.copyTo(imageCopy); 
if (ids.size() > 0) 
{ 
    aruco::drawDetectedMarkers(imageCopy, corners, ids); 
    vector<Mat>rvecs, tvecs; 
    estimatePoseSingleMarkers(corners, 20, cameraMatrix, distCoeffs, rvecs, tvecs); 
    for (int i = 0; i<ids.size(); i++) 
     drawAxis(imageCopy, cameraMatrix, distCoeffs, rvecs[i], tvecs[i],0.1); 
} 

Проблема заключается в том, когда программа выполняется в estimatePoseSingleMarkers(corners, 20, cameraMatrix, distCoeffs, rvecs, tvecs);

Я получил сообщение об ошибке любит это: OpenCV Error: Assertion failed (0 <= i && i < (int)v.size()) in cv::_InputArray::getMat_, file C:\opencv-3.0\source\opencv\modules\core\src\matrix.cpp, line 1253

Является ли это причиной неправильного формата переменных? (cameraMartix & distCoeffs)

Мне нужна помощь, чтобы выяснить, что происходит. Спасибо.

ответ

0

Пожалуйста, попытайтесь distCoeffs = (Mat1f (5, 1) < < 0,133013, -0,322199, -0,001524, 0,004866, 0.0);

0

Это было опубликовано давно, поэтому я надеюсь, что вы нашли обходной путь.

Я считаю, что если вы пытаетесь следовать учебник, то ваш вопрос заключается в следующем:

vector<Mat>rvecs, tvecs; 

Вместо этого он должен быть:

vector<Vec3d>rvecs, tvecs; 

Вот что сделал это для меня. Надеюсь, это поможет.

Смежные вопросы