我在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 (将#修改为@)

相关问答

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