openCV stereoCalibrate - 断言失败(D1.empty()||(D1.total()== 4))

时间:2017-01-08 22:18:32

标签: java opencv

我正在使用openCV calibrateCamera()来检索我想用作distCoeffs输入的stereoCalibrate()。但调用stereoCalibrate()会给我以下错误消息:

OpenCV错误:在stereoCalibrate中断言失败(D1.empty()||(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)

1 个答案:

答案 0 :(得分:1)

我与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包装器,但我认为它并不重要 - 本机方法是相同的。