Не удалось подтвердить графическое решение solvePnpRansac

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

Ошибка OpenCV: утверждение не выполнено (object.rows == 1 && object.cols> 0 && object.type () == CV_32FC3) в cv :: gpu :: solvePnPRansac, файл C: \ opencv \ sources \ modules \ gpu \ src \ calib3d.cpp, строка 218

Если я запускаю свой код с использованием convertPnP или решения на основе CPU, то все работает нормально.

Я взглянул на код calib3d.cpp в строке 218, и проблема, похоже, связана с первым параметром функции (это должен быть список контрольных точек).

Кажется, что формат, который я использую для отправки контрольной точки в функцию, неправильный, но я не выяснил, какой из них правильный.

Вот мой код:

// Reference Points and Detected Points for Pose Estimation
std::vector<cv::Point3f> refMarkerPoint;
std::vector<cv::Point2f> markerPoints;

...

cv::Mat rvec = cv::Mat::zeros(1, 3, CV_32F);
cv::Mat tvec = cv::Mat::zeros(1, 3, CV_32F);
cv::Mat rotation = cv::Mat::zeros(1, 3, CV_32F);
cv::Mat tvec2 = cv::Mat::zeros(1, 3, CV_32F);
Vec3d eulerAngles;

...

if (cx_right != 0 && cx_left != 0 && markerPoints.size() > 0)
{
marker_detected = 1;
//solvePnPRansac(refMarkerPoint, markerPoints, cameraMatrix, distCoeffs, rvec, tvec, false, 20, 4, 20, noArray(), CV_ITERATIVE); // CV_EPNP, CV_P3P
//solvePnP(Mat(refMarkerPoint), Mat(markerPoints), cameraMatrix, distCoeffs, rvec, tvec);
gpu::solvePnPRansac(Mat(refMarkerPoint), Mat(markerPoints), cameraMatrix, distCoeffs, rvec, tvec);

cv::Rodrigues(rvec, rotation);...
}

У вас есть какие-нибудь предложения?

1

Решение

первый параметр должен быть однобитным матом CV_32FC3, в то время как в вашем коде первый параметр может быть одностолбцовым матом. попробуйте изменить его

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]