2012-10-07 61 views
5

我想学习如何使用openCV和python进行3D和立体相机校准。使用8x6棋盘(7x5内角)的3个摄像头视图,我能够得到cv.calibrateCamera()工作正常,但当我使用cv2时完全卡住。 其中一个步骤是找到棋盘角落。 cv.findChessboardCorners()返回角点列表,cv2使用numpy数组,并将点作为(35,1,2)numpy数组返回。 cv2.calibrateCamera()的参数是object_points,image_pointsimage_size。我正在提供(3,35,3) numpy数组中的对象点以及(3,35,2) numpy数组中的图像点。图片大小为(1632, 1224)。有人可以告诉我问题是什么吗?我得到的错误是不是非常有用:使用Python的cv2.cameraCalibration

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 

回答

5

点需要FLOAT32,以矩阵形式(N,2)和(N,3)。你可以这样转换为float32:

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

谢谢!这个错误让我无法接受! – shinjin

+1

在2015年使用OpenCV 2.4.10发现了这个问题。我在cv :: collectCalibrationData函数中得到了类似的“cv2.error:... calibration.cpp:3169:error:(-215)ni> = 0”。解决方法是将两个阵列分别重构为(1,N,3)和(1,N,2),分别用于对象和图像点。 – sastanin

相关问题