我正在使用openCV的calibrateCamera()来检索我想要用作stereoCalibrate()输入的distCoeffs。但是调用stereoCalibrate()会给出以下错误消息:
OpenCV错误:在stereoCalibrate中断言失败(D1.空() || (D1.total() == 4))
调试告诉我D1.total()是5,它不是空的。我没有修改distCoeffs (D1),所以我认为它不需要进一步修改就可以作为stereoCalibrate()的输入参数。
org.opencv.calib3d.Calib3d.calibrateCamera(objectPoints, cheesboardCornersList, chessboardImg.size(), intrMatrix1, distCoeffs1, rvecs1, tvecs1);
org.opencv.calib3d.Calib3d.calibrateCamera(objectPoints, cheesboardCornersList, chessboardImg.size(), intrMatrix2, distCoeffs2, rvecs2, tvecs2);
...
org.opencv.calib3d.Calib3d.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, intrMatrix1, distCoeffs1, intrMatrix2, distCoeffs2, img1.size(), R, T, org.opencv.calib3d.Calib3d.CALIB_FIX_INTRINSIC);(Java,openCV 3.1)
发布于 2017-02-17 00:42:23
我在stereoCalibrate()上也遇到了同样的问题。但是您可能会注意到,Calib3d有另一个版本的stereoCalibrate。
public static double stereoCalibrate(java.util.List<Mat> objectPoints,
java.util.List<Mat> imagePoints1,
java.util.List<Mat> imagePoints2,
Mat cameraMatrix1,
Mat distCoeffs1,
Mat cameraMatrix2,
Mat distCoeffs2,
Size imageSize,
Mat R,
Mat T,
Mat E,
Mat F) look here
不同的是,这个版本的方法还返回基本矩阵E和基本矩阵F。这对我很有帮助。我使用的是bytedeco的JavaCV包装器,但我认为这并不重要--本机方法都是一样的。
https://stackoverflow.com/questions/41538505
复制相似问题