首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenCV3.0中使用solvePnP函数时

在OpenCV3.0中使用solvePnP函数时
EN

Stack Overflow用户
提问于 2015-06-04 06:19:02
回答 1查看 1.1K关注 0票数 2

我想做的是得到QR码的4个像素点(2D坐标),

并输入它们和QR码的世界三维坐标作为函数参数,solvePnP.

但是当我编译时,solvePnP不能工作!发生了这样的错误..。

断言失败(npoint >= 0&npoint == std::max(ipoints.checkVector(2,CV_32F),ipoint,checkVector(2,CV_64F)在cv::solvePnP

在solvePnP中,它声明可以使用std::Vector或cv::Mat类型,因此我尝试更改这两种日期类型。但它仍然不能..。

我的源代码在下面,

代码语言:javascript
复制
***Point3d pt[4];
pt[0] = Point3d(0, 0, 0);
pt[1] = Point3d(0, 178, 0);
pt[2] = Point3d(178, 178, 0);
pt[3] = Point3d(178, 0, 0);
vector<Point3f> objectPoints;
for (int i = 0; i < 4; i++)
    objectPoints.push_back(pt[i]);  // 3d world coordinates
Point2d point[4];***

在这个过程之后,我从QR代码中得到了4个顶点坐标到point[]中。接下来是,

代码语言:javascript
复制
vector<Point2f> imagePoints;
    for (int i = 0; i < 4; i++)
        imagePoints.push_back(point[i]);    // 2d image coordinates


    //Mat objPts(4, 1, CV_64F, pt);
    //Mat imgPts(4, 1, CV_64F, point);

    // camera parameters
    double Intrinsic[] = { fx, 0, cx, 0, fy, cy, 0, 0, 1 };
    Mat Camera_Matrix(3, 3, CV_64FC1, Intrinsic);

    double Distort[] = { k1, k2, p1, p2 };
    Mat DistortCoeffs(4, 1, CV_64FC1, Distort);

    // estimate camera pose
    Mat rvec, tvec; // rotation & translation vectors

    solvePnP(objectPoints, imagePoints, Camera_Matrix, DistortCoeffs, rvec, tvec);

请帮帮忙!

EN

回答 1

Stack Overflow用户

发布于 2016-08-22 08:12:08

在您的代码中,数组"point/pt“是Point2d的,但是”objectPoint/imagePoints“是Point2f的向量。

顺便说一句,与文档不同的是,solvePnP函数似乎要求对象点和图像点采用向量或cv::Mat(N*2/3)的格式。我尝试使用cv::Mat(2/3*N)作为输入,但是出现了相同的断言失败错误。

您可以按照官方示例来帮助调试。它位于/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src.中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30636324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档