使用Python进行cv2相机校准

5

我正在尝试使用openCV和python进行三维和立体摄像机标定的学习。使用8x6棋盘(7x5个内角)的三个相机视图,我能够使cv.calibrateCamera()正常工作,但在使用cv2时,则完全卡住了。

其中一个步骤是找到棋盘角落。而cv.findChessboardCorners()返回点列表作为角落,cv2使用numpy数组,将点作为(35,1,2)numpy数组返回。cv2.calibrateCamera()的参数是object_pointsimage_pointsimage_size。我提供了一个 (3,35,3) 的numpy数组用于对象点,并提供了(3,35,2)的numpy数组用于图像点。图像大小为(1632, 1224)。有谁能告诉我问题出在哪里吗?我得到的错误并不是很有用:

Traceback (most recent call last):
  File "H:/pyCV/locv_book/ch11/calCamera2a.py", line 46, in <module>
  cv2.calibrateCamera(opts,ipts,size)
error: ..\..\..\src\opencv\modules\calib3d\src\calibration.cpp:3173: error: (-215) ni >= 0
1个回答

5

这里需要的是浮点数,以矩阵形式表示(N,2)和(N,3)。您可以通过以下方式将其转换为float32:

points32 = np.array(points,dtype=np.float32) 

1
在2015年发现了这个问题,使用的是OpenCV 2.4.10。我遇到了类似的“cv2.error: ... calibration.cpp:3169: error: (-215) ni >= 0 in function cv::collectCalibrationData”的错误。解决方法是将对象点和图像点的两个数组都重塑为(1, N, 3)和(1, N, 2)。 - sastanin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接