微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在cv2.fisheye.calibrate时遇到错误,无法校准鱼眼镜头

如何解决我在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 举报,一经查实,本站将立刻删除。