使用 cv2.omnidir.calibrate 校准鱼眼图像时的断言

问题描述

我正在尝试校准 200 度 FOV 鱼眼相机,使用 cv2.fisheye 图像在未失真的情况下裁剪过多。 当我尝试使用 cv2.omnidir 进行校准时,出现以下错误

cv2.error: OpenCV(4.5.1) /tmp/pip-req-build-n_alixql/opencv/modules/core/src/matrix_wrap.cpp:1146: error: (-215:Assertion Failed) !fixedSize( ) || ((Mat*)obj)->size.operator()() == _sz in function 'create'

这是我如何使用这个命令

k = np.zeros((3,3),dtype=np.float32)
d = np.zeros((4,1),dtype=np.float32)
dims = gray.shape[::-1]
rvecs = [np.zeros((1,1,dtype=np.float32) for _ in range(len(obj_points))]
tvecs = [np.zeros((1,dtype=np.float32)  for _ in range(len(obj_points))]

rms,_,_ =  cv2.omnidir.calibrate(
                objectPoints=np.array(obj_points,dtype=np.float32),imagePoints=np.array(img_points,size=dims,K=k,xi=np.array([],D=d,rvecs=rvecs,tvecs=tvecs,flags=cv2.omnidir.CALIB_FIX_SKEW + cv2.omnidir.CALIB_USE_GUESS,#cv2.omnidir.CALIB_USE_GUESS+ cv2.omnidir.CALIB_FIX_SKEW,criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,30,1e-6))

我将不胜感激。 谢谢

解决方法

使用此命令解决断言问题

rms,k,xi,d,rvecs,tvecs,idx  =  cv2.omnidir.calibrate(
            objectPoints=obj_points,imagePoints=img_points,size=dims,K=None,xi=None,D=None,flags=cv2.omnidir.CALIB_USE_GUESS + cv2.omnidir.CALIB_FIX_SKEW + cv2.omnidir.CALIB_FIX_CENTER,criteria=subpix_criteria)

我期望 cv2.omnidir.calibrate 与 cv2.fisheye.calibrate 具有相同的语法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...