在OPENCV 3.0中使用solvePnP函数时

时间:2015-06-04 06:19:02

标签: opencv3.0

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

并输入它们和QR码的World-3D协调作为函数的参数,solvePnP。

但是当我编译时,solvePnP不起作用!错误发生了类似的事情..

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

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

我的源代码如下,

    [SitecoreField(UrlOptions = SitecoreInfoUrlOptions.LanguageEmbeddingNever|SitecoreInfoUrlOptions.AlwaysIncludeServerUrl)]
    public virtual Link Link { get; set; }

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

***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];***

请帮忙!

1 个答案:

答案 0 :(得分:2)

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

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

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