cv2.stereoCalibrate抛出断言失败



我正在使用opencv-contrib python(4.5.4.60(来校准由一台相机拍摄的两张照片模拟的立体视觉(目前我只有其中一张(,就像未来有两台相机用于立体深度估计一样。我从几张照片中找到了相机的内在参数,并试图将两张照片中的ChAruCo标记点传递到stereoCalibrate,但断言失败:

ret, M1, d1, M2, d2, R, T, E, F = cv2.stereoCalibrate(objpoints_L, imgpoints_L, imgpoints_R, camera_matrix, distortion_coefficients0, camera_matrix, distortion_coefficients0,img_r1.shape[:2], F = F)
cv2.error: OpenCV(4.5.4) D:aopencv-pythonopencv-pythonopencvmodulescalib3dsrccalibration.cpp:1088: error: (-215:Assertion failed) (count >= 4) || (count == 3 && useExtrinsicGuess) in function 'cvFindExtrinsicCameraParams2'

我已经用cv2.utils.dumpInputArray((检查了对象点和图像点的输入类型

InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=40 dims(-1)=2 size(-1)=1x40 type(-1)=CV_32FC3
InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=40 dims(-1)=2 size(-1)=1x40 type(-1)=CV_32FC2
InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=40 dims(-1)=2 size(-1)=1x40 type(-1)=CV_32FC2

对它们进行了排序,所以我只通过了两张照片的匹配,但断言仍然失败,无法找出我做错了什么。

问题是ChAruCo标记被cv2.aruco.detectMarkers返回为具有单点(n, 1, 2)的对象数组。函数接受这种点格式(例如cv2.solvePnPcv2.findFundamentalMat(,但如果您试图将它们传递到cv2.stereoCalibrate中,它会检查每个对象是否有3个以上的点,但会得到具有单点的n对象,则断言会失败。要使用这些点,您必须将阵列重塑为具有所有ChAruCo点(1,n,2)的单个对象。对(1, n, 3)cv2.aruco.getBoardObjectAndImagePoints获得的对象点执行相同的整形。

相关内容

  • 没有找到相关文章

最新更新