Hi, I use OpenCV on Andoid. I can use it for face detection. But when I use it for solvePnp, the app crash. The code looks as follows:
Mat mCameraMatrix = new Mat(3, 3, CvType.CV_64FC1); //assign values to mCameraMatrix, not real calibration results
mImagePoints = new MatOfPoint2f();
List<point> imgPoints = new ArrayList<point>(); imgPoints.add(new Point(mSpecificInferencePointArray[0], mSpecificInferencePointArray[1])); imgPoints.add(new Point(mSpecificInferencePointArray[2], mSpecificInferencePointArray[3])); imgPoints.add(new Point(mSpecificInferencePointArray[4], mSpecificInferencePointArray[5])); imgPoints.add(new Point(mSpecificInferencePointArray[6], mSpecificInferencePointArray[7])); imgPoints.add(new Point(mSpecificInferencePointArray[8], mSpecificInferencePointArray[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);
When I call Calib3d.solvePnP, the App crash.
The 3D and 2D points do not have correspondence and the camera intrinsic parameters are not real. I set the value to fx, fy, cx and cy. But I think the App should not crash even given simulated inputs.
Any help is very appreciated.
Best,
YL