Я новый пользователь OpenCV и пытаюсь выполнить пример для калибровки камеры, но у меня возникла проблема с этим методом:
@ Переопределить общедоступный Mat render (CvCameraViewFrame inputFrame) {MatundistortedFrame = new Mat (inputFrame.rgba (). size (), inputFrame.rgba (). type ());Calib3d.undistort (inputFrame.rgba (), undeistortedFrame, mCalibrator.getCameraMatrix (), mCalibrator.getDistortionCoefficients ());
Mat comparisonFrame = inputFrame.rgba();
undistortedFrame.colRange(new Range(0, mWidth / 2)).copyTo(comparisonFrame.colRange(new Range(mWidth / 2, mWidth)));
List<MatOfPoint> border = new ArrayList<MatOfPoint>();
final int shift = (int)(mWidth * 0.005);
border.add(new MatOfPoint(new Point(mWidth / 2 - shift, 0), new Point(mWidth / 2 + shift, 0),
new Point(mWidth / 2 + shift, mHeight), new Point(mWidth / 2 - shift, mHeight)));
Imgproc.fillPoly(comparisonFrame, border, new Scalar(255, 255, 255));
Imgproc.putText(comparisonFrame, mResources.getString(R.string.original), new Point(mWidth * 0.1, mHeight * 0.1),
Core.FONT_HERSHEY_SIMPLEX, 1.0, new Scalar(255, 255, 0));
Imgproc.putText(comparisonFrame, mResources.getString(R.string.undistorted), new Point(mWidth * 0.6, mHeight * 0.1),
Core.FONT_HERSHEY_SIMPLEX, 1.0, new Scalar(255, 255, 0));
return comparisonFrame;}
Проблема в версии (3.4.0), я ненайти этот метод Calib3d.undistort и из-за этого я уже пробовал методы undistortPoints и undistortImage, но в обоих из них показана ошибка ниже:
2019-09-21 18:27:51.030 12982-13108/com.example.camera_calibration E/cv::error(): OpenCV(3.4.0-dev) Error: Assertion failed (distorted.type() == (((5) & ((1 << 3) - 1)) + (((2)-1) << 3)) || distorted.type() == (((6) & ((1 << 3) - 1)) + (((2)-1) << 3))) in void cv::fisheye::undistortPoints(cv::InputArray, cv::OutputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray), file ../../modules/calib3d/src/fisheye.cpp, line 324
2019-09-21 18:27:51.030 12982-12982/com.example.camera_calibration D/ViewRootImpl@3c0c3bc[PopupWindow:99a8389]: MSG_WINDOW_FOCUS_CHANGED 0 1
2019-09-21 18:27:51.030 12982-13108/com.example.camera_calibration E/org.opencv.calib3d: calib3d::undistortPoints_11() caught cv::Exception: OpenCV(3.4.0-dev) ../../modules/calib3d/src/fisheye.cpp:324: error: (-215) distorted.type() == (((5) & ((1 << 3) - 1)) + (((2)-1) << 3)) || distorted.type() == (((6) & ((1 << 3) - 1)) + (((2)-1) << 3)) in function void cv::fisheye::undistortPoints(cv::InputArray, cv::OutputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray)
2019-09-21 18:27:51.031 12982-13108/com.example.camera_calibration E/AndroidRuntime: FATAL EXCEPTION: Thread-6
Process: com.example.camera_calibration, PID: 12982
CvException [org.opencv.core.CvException: cv::Exception: OpenCV(3.4.0-dev) ../../modules/calib3d/src/fisheye.cpp:324: error: (-215) distorted.type() == (((5) & ((1 << 3) - 1)) + (((2)-1) << 3)) || distorted.type() == (((6) & ((1 << 3) - 1)) + (((2)-1) << 3)) in function void cv::fisheye::undistortPoints(cv::InputArray, cv::OutputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray)
]
at org.opencv.calib3d.Calib3d.undistortPoints_1(Native Method)
at org.opencv.calib3d.Calib3d.undistortPoints(Calib3d.java:1400)
at com.example.camera_calibration.UndistortionFrameRender.render(OnCameraFrameRender.java:54)
at com.example.camera_calibration.OnCameraFrameRender.render(OnCameraFrameRender.java:101)
at com.example.camera_calibration.CameraCalibrationActivity.onCameraFrame(CameraCalibrationActivity.java:229)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:392)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:373)
at java.lang.Thread.run(Thread.java:764)
Я хотел бы знать, если у кого-то была подобная проблемаи как это решить?Я пробую это на S8, и я не знаю, влияет ли камера на этот результат.
Действительно, спасибо за ваше время.