我想做的是得到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类型,因此我尝试更改这两种日期类型。但它仍然不能..。
我的源代码在下面,
***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[]中。接下来是,
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);请帮帮忙!
发布于 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.中。
https://stackoverflow.com/questions/30636324
复制相似问题