solvePnpRansac GPU断言失败

时间:2016-02-09 17:11:11

标签: c++ opencv pose-estimation

我试图使用解决相机姿势的gpu版本来估算相机的姿势,但是我收到以下错误:

OpenCV错误:cv :: gpu :: solvePnPRansac中的断言失败(object.rows == 1&& object.cols> 0&& object.type()== CV_32FC3),文件C:\ opencv \ sources \ modules \ gpu \ src \ calib3d.cpp,第218行

如果我使用solvePnP或基于cpu的solvePnPRansac运行我的代码,一切正常。

我在第218行查看了calib3d.cpp的代码,问题似乎与函数的第一个参数有关(应该是参考点的列表)。

似乎我用来将参考点发送到函数的格式是错误的,但我没有弄清楚哪一个是正确的。

这是我的代码:

// 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 个答案:

答案 0 :(得分:0)

第一个参数应该是一个原始的CV_32FC3 Mat,而在您的代码中,第一个参数可能是一列Mat。尝试重塑它