python+opencv使用摄像头标定功能时,输出的内容和格式发生错误

问题遇到的现象和发生背景

现在自己在做一个gui,其中按下一个按键会读取已经记录下来的灰度图进行标定。其中,灰度图是判断存在 retL, corners = cv2.findChessboardCorners(img_l,(self.H,self.W),None)
当ret为true时记录下图片

问题相关代码,请勿粘贴截图
    def calculate(self):#计算内参
        self.H = int(e1.get())
        self.W = int(e2.get())
        i = 0
        pic_path = os.path.join("sample_pics")#存储图片的文件夹
        
        
        for  file in os.listdir(pic_path):
            i=i+1
            
        if i > 40:#图片多于40张可以开始标定
            self.goodenough = True
        
        
        if self.goodenough:
            print("----*Calibrating*----")
            criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
            #print(criteria)
            
            objpoints= []
            objp = np.zeros((8*6,3), np.float32)
            objp[:,:2] = np.mgrid[0:8,0:6].T.reshape(-1,2)
            imgpoints= []

            for  file in os.listdir(pic_path):#读取文件夹下所有图片
                img_l = cv2.imread(os.path.join(pic_path,file), 0)
                print(img_l.shape)
                (retL, corners) = cv2.findChessboardCorners(img_l,(self.H,self.W),None)
                if retL == True:
                    objpoints.append(objp)
                    corners = cv2.cornerSubPix(img_l,corners,(5,5),(-1,-1),criteria)
                    imgpoints.append(corners)
            #print("1")
            retL, mtxL, distL, rvecsL, tvecsL = cv2.calibrateCamera(objpoints,
                                                            imgpoints,
                                                            img_l.shape[::-1],None,None)

            #print(2)
            print("-------------------摄像头标定数据-----------------------")
            print('ret:', retL)
            print('mtx:\n', mtxL ) # 内参数矩阵
            print('dist:\n', distL) # 畸变系数 distortion cofficients = (k_1,k_2,p_1,p_2,k_3)
            print('rvecs:\n', rvecsL) # 旋转向量 # 外参数
            print('tvecs:\n', tvecsL) # 平移向量 # 外参数
            print("--------------------------------------------------------------")

        else:
            print("Please add more samples.")

运行结果及报错内容

img


img

img

我的解答思路和尝试过的方法
我想要达到的结果

想输出一个正确的标定内参结果

没有完整的代码没看太明白,给你个例子对比参考一下,我这个是先截取棋盘格(5*7的棋盘格)图像,按照规则命名后又读进来处理的:

#!/usr/bin/env python3

import cv2
import numpy as np

def findConner(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, (nx, ny), None)
    if ret==True:
        cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
        objpoints.append(objp)
        imgpoints.append(corners)
        cv2.drawChessboardCorners(image, (nx, ny), corners, True)
        cv2.imshow("corners",image)

def getMatrix():
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, (640,480), None, None)
    print("mtx:", mtx)
    print("dist:", dist)
    return mtx, dist
 
nx = 5
ny = 7
objp = np.zeros((nx*ny,3), np.float32)
objp[:,:2] = np.mgrid[0:nx,0:ny].T.reshape(-1,2)
objp = objp*31
objpoints = []
imgpoints = []
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 31, 0.001)   

for i in range(1,8):
    imageFile = 'images/13-'+str(i)+'.png'
    img = cv2.imread(imageFile)
    cv2.imshow(imageFile,img)
    findConner(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

mtx, dist = getMatrix()