我在Andoid上使用OpenCV。我可以将其用于面部检测。但是,当我将其用于solvePnp时,应用程序崩溃。
我的目的是评估用于solvePnP的时间。因此,我不使用真实的校准值,而是假设fov为60度,图像大小为640x480,然后指定fx = 420,fy = 420,cx = 320,cy = 240。
代码如下:
Mat mCameraMatrix = new Mat(3, 3, CvType.CV_64FC1);
//then specify fx, fy, cx, cy
mImagePoints = new MatOfPoint2f();
List<Point> imgPoints = new ArrayList<Point>();
imgPoints.add(new Point(imagePoint[0], imagePoint[1]));
imgPoints.add(new Point(imagePoint[2], imagePoint[3]));
imgPoints.add(new Point(imagePoint[4], imagePoint[5]));
imgPoints.add(new Point(imagePoint[6], imagePoint[7]));
imgPoints.add(new Point(imagePoint[8], imagePoint[9]));
mImagePoints.fromList(imgPoints);
mObjectPoints = new MatOfPoint3f();
List<Point3> objPoints = new ArrayList<Point3>();
objPoints.add(new Point3(-22.20, -66.559, -28.726));
objPoints.add(new Point3(15.55, -68.66, -28.174));
objPoints.add(new Point3(-5.97, -84.487, -64.864));
objPoints.add(new Point3(-26.322, -50.606, -97.192));
objPoints.add(new Point3(23.032, -48.908, -96.501));
mObjectPoints.fromList(objPoints);
Mat rvec = new Mat(3,1, CvType.CV_64FC1);
Mat tvec = new Mat(3, 1, CvType.CV_64FC1);
Calib3d.solvePnP(mObjectPoints, mImagePoints, mCameraMatrix, null, rvec, tvec);
[当我调用Calib3d.solvePnP时,应用程序崩溃。
3D和2D点没有严格遵循对应关系,并且3D点是非平面的。相机固有参数不是真实的。但我认为,即使给出模拟输入,该应用也不应崩溃。输入。
非常感谢您的帮助。
最佳,
YL
已解决。实际上我至少需要6分而不是5分。