2017-01-08 3 views
0

Ich verwende OpenCV calibrateCamera(), um distCoeffs abzurufen, die ich als Eingabe für stereoCalibrate() verwenden möchte. Aber Aufruf stereoCalibrate() gibt mir die folgende Fehlermeldung:openCV stereoCalibrate - Assertion fehlgeschlagen (D1.empty() || (D1.total() == 4))

OpenCV Fehler: Assertion failed (D1.empty() || (D1.total() == 4)) in stereoCalibrate

Debugging sagt mir, dass D1.total() ist 5 und das ist nicht leer. Ich habe distCoeffs (D1) nicht geändert, also dachte ich, dass es als Eingangsparameter für stereoCalibrate() ohne weitere Modifizierung geeignet wäre.

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)

Antwort

1

Ich hatte genau das gleiche Problem mit stereoCalibrate(). Aber Sie können feststellen, dass Calib3d eine andere Version von stereoCalibrate hat.

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

Der Unterschied besteht darin, dass diese Version der Methode gibt auch wesentliche Matrix E und Fundamental-Matrix F. Das hat mir geholfen. Ich habe JavaCV Wrapper von bytedeco verwendet, aber ich denke es ist egal - native Methoden sind die gleichen.

Verwandte Themen