我正在使用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)
答案 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)
不同之处在于此版本的方法还返回基本矩阵E
和基本矩阵F
。
这对我有帮助。我使用了来自bytedeco的JavaCV包装器,但我认为它并不重要 - 本机方法是相同的。