我正在尝试学习如何使用openCV和python进行3D和立体相机校准。使用8x6棋盘的3个摄像机视图(7x5内角),我能够使cv.calibrateCamera()
正常工作,但在使用cv2时完全卡住了。
其中一个步骤是找到棋盘角落。尽管cv.findChessboardCorners()
将角点作为点列表返回,但cv2使用numpy数组,并将这些点作为(35,1,2)numpy数组返回。 cv2.calibrateCamera()的参数是object_points
,image_points
和image_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
答案 0 :(得分:5)
点需要是float32,矩阵形式(N,2)和(N,3)。你可以这样转换为float32:
points32 = np.array(points,dtype=np.float32)