2017-02-23 338 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; 

這就是爲我做。我希望這有幫助。