[在Android上使用OpenCV resolvePnP时应用程序崩溃

问题描述 投票:0回答:1

我在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

android opencv4android opencv-solvepnp
1个回答
0
投票

已解决。实际上我至少需要6分而不是5分。

© www.soinside.com 2019 - 2024. All rights reserved.