我想做的是获得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];***
请帮忙!
答案 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。