У меня проблема с запуском следующего кода:
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)
Мне нужна помощь, чтобы выяснить, что происходит не так. Спасибо.
Пожалуйста, попробуй
distCoeffs = (Mat1f (5, 1) << 0,133013, -0,322199, -0,001524, 0,004866, 0,0);
Это было опубликовано давно, поэтому я надеюсь, что вы нашли обходной путь.
Я считаю, что если вы пытаетесь следовать учебнику, то ваша проблема заключается в следующем:
vector<Mat>rvecs, tvecs;
Вместо этого оно должно быть:
vector<Vec3d>rvecs, tvecs;
Вот что сделал это для меня. Надеюсь, это поможет.