如何解决我在cv2.fisheye.calibrate时遇到错误,无法校准鱼眼镜头
我正在尝试使用OpenCV校准PIXPRO SP360鱼眼镜头。我用相机获取了棋盘的七幅图像并运行了代码,但是在cv2.fisheye.calibrate部分出现错误。它似乎能够检测到拐角,但我不知道为什么无法对其进行校准。 棋盘行= 9,列= 7
这是我的代码:
import yaml
import cv2
import numpy as np
import glob
CHECKERBOARD = (7,9)
subpix_criteria =
(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,30,0.1)
calibration_flags =cv2.fisheye.CALIB_RECOmpuTE_EXTRINSIC+cv2.fisheye.CALIB_CHECK_COND+cv2.fisheye.CALIB_FIX_SKEW
objp = np.zeros((1,CHECKERBOARD[0]*CHECKERBOARD[1],3),np.float32)
objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0],0:CHECKERBOARD[1]].T.reshape(-1,2)
_img_shape = None
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.
images = glob.glob('*.jpg')
for fname in images:
img = cv2.imread(fname)
if _img_shape == None:
_img_shape = img.shape[:2]
else:
assert _img_shape == img.shape[:2],"All images must share the same size."
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret,corners = cv2.findChessboardCorners(gray,CHECKERBOARD,cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_norMALIZE_IMAGE)
# If found,add object points,image points (after refining them)
if ret == True:
objpoints.append(objp)
cv2.cornerSubPix(gray,corners,(3,(-1,-1),subpix_criteria)
imgpoints.append(corners)
N_OK = len(objpoints)
K = np.zeros((3,3))
D = np.zeros((4,1))
rvecs = [np.zeros((1,1,dtype=np.float64) for i in range(N_OK)]
tvecs = [np.zeros((1,dtype=np.float64) for i in range(N_OK)]
rms,_,_ = \
cv2.fisheye.calibrate(
objpoints,imgpoints,gray.shape[::-1],K,D,rvecs,tvecs,calibration_flags,(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,1e-6)
)
print("Found " + str(N_OK) + " valid images for calibration")
print("DIM=" + str(_img_shape[::-1]))
print("K=np.array(" + str(K.tolist()) + ")")
print("D=np.array(" + str(D.tolist()) + ")")
这是错误消息:
error Traceback (most
recent call last)
<ipython-input-14-cd3c7fa0f1ad> in <module>
42 tvecs,43 calibration_flags,---> 44 (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,1e-6)
45 )
46 print("Found " + str(N_OK) + " valid images for calibration")
error: OpenCV(4.4.0)
C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-
52oirelq\opencv\modules\calib3d\src\fisheye.cpp:1449:
error: (-3:Internal error) CALIB_CHECK_COND - Ill-
conditioned matrix for input array 4 in function
'cv::internal::CalibrateExtrinsics'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。