Python 和 OpenCV:-215:Assertion failed 尝试调用calibrateCamera

问题描述

我是 OpenCV 的新手,正在尝试学习有关棋盘图像 3D 重建的在线教程。

我正在使用以下代码进行流程:

import glob
import cv2
import numpy as np

chessboard_size = (7,5)

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,30,0.001)
#objp = np.zeros((9*6,3),np.float32)
#objp[:,:2] = np.mgrid[0:6.0:9].T.reshape(-1,2)
objp = np.zeros((np.prod(chessboard_size),dtype=np.float32)
objp[:,:2] = np.mgrid[0:chessboard_size[0],0:chessboard_size[1]].T.reshape(-1,2)
objp = np.array([objp])

objpoints = []
imgpoints = []
images = glob.glob('./img/*')

for fname in images:
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    ret,corners = cv2.findChessboardCorners(gray,(6,9),None)
    #corners = np.array([[corner for [corner] in corners]])

    if ret == True:
        objpoints.append(objp)
        corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
        imgpoints.append(corners)

        cv2.drawChessboardCorners(img,corners2,ret)
    
    ret,mtx,dist,rvecs,tvecs = cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)

但是,我不断收到以下错误

ret,None)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-95hbg2jt\opencv\modules\calib3d\src\calibration.cpp:3689: error: (-215:Assertion Failed) nimages > 0 in function 'cv::calibrateCameraRO'

我有两个问题:

  1. 我该怎么做才能克服这个错误
  2. 如何显示 3D 重建后的结果图像?

我使用以下图像作为输入:

Input Image

TIA

解决方法

Assertion failed,是的,但它也说断言是 nimages > 0

这意味着您没有向 calibrateCamera 提供数据。

为此,findChessboardCorners 在第一张图片中没有发现任何角落。

请使用调试器或至少使用 print(...) 打印变量值。