为什么opencv python中的相机校准需要超过30分钟?

为什么opencv python中的相机校准需要超过30分钟?,python,opencv,computer-vision,camera-calibration,Python,Opencv,Computer Vision,Camera Calibration,我试图复制 当我运行我的脚本时,校准过程不会停止大约30分钟,我希望输出的是内置相机矩阵。我的代码有什么问题?为什么校准过程需要这么长时间 这是我的密码 import os import cv2 import numpy as np # DUMMY TEST FilepathCalib = './data' # Declaring global variable img_calib_set = [] points_3d_sample = np.zeros((6*7,3), np.floa

我试图复制

当我运行我的脚本时,校准过程不会停止大约30分钟,我希望输出的是内置相机矩阵。我的代码有什么问题?为什么校准过程需要这么长时间

这是我的密码

import os
import cv2
import numpy as np 

# DUMMY TEST
FilepathCalib = './data'

# Declaring global variable
img_calib_set = []

points_3d_sample = np.zeros((6*7,3), np.float32)
points_3d_sample[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)

points_2d = []
points_3d = []

# Loading calibration image dataset
for img_calib in os.listdir(FilepathCalib):
    img_calib = cv2.imread(FilepathCalib + '/' + img_calib, 0)
    img_calib_set.append(img_calib)

# Finding checkerboard corners pattern in image dataset
for img in img_calib_set:
    ret_val, corner = cv2.findChessboardCorners(img, (7,9), None)

    if ret_val == True:
        points_3d.append(points_3d_sample)
        points_2d.append(corner)

# Extracting camera parameters 
ret_val, intrinsic_mat, dist_coef, rot_vector, tran_vector =         
cv2.calibrateCamera(points_3d, points_2d, img_calib_set[0].shape[::-1], None, None)
print(intrinsic_mat)
这是我的样品校准图像

cv2.findChessboardCorners函数的处理时间在很大程度上取决于输入图像

在1K-4K图像上30分钟不是异常。 您是否尝试过将处理时间写入控制台输出或调试日志

通过这种方式,您可以了解某些图像是否比其他图像耗时更长。我有一个案例,大多数图像需要10-20秒,但少数图像需要3-5分钟。花了很多时间处理的图片通常有模糊的棋盘格图案运动模糊,或者有其他矩形背景图案壁橱、百叶窗、窗框等

判断你的输入图像,我可以肯定地看到纸板是轻微弯曲的结果举行。我也很难将校准模式粘贴到真正平坦的表面上。最后,我使用了一个LCD显示器来显示图像,并移动了摄像机来获取校准图像,以确保不会在显示器上缩放图像;图像上的1个像素应该是监视器上的1个像素,并且不必是全屏。 这给了我最小的重投影误差

你的样本图像质量是否低于你的实际镜头?您可以清楚地看到,JPEG压缩算法在图像的边缘上创建了大量压缩伪影。这并不理想。如果这是您的实际镜头,我建议将压缩质量设置为最大,或使用无损格式,如PNG


通过用更好的候选图像替换一些校准图像,我能够将校准时间缩短一半

cv2.findChessboardCorners函数的处理时间在很大程度上取决于输入图像

在1K-4K图像上30分钟不是异常。 您是否尝试过将处理时间写入控制台输出或调试日志

通过这种方式,您可以了解某些图像是否比其他图像耗时更长。我有一个案例,大多数图像需要10-20秒,但少数图像需要3-5分钟。花了很多时间处理的图片通常有模糊的棋盘格图案运动模糊,或者有其他矩形背景图案壁橱、百叶窗、窗框等

判断你的输入图像,我可以肯定地看到纸板是轻微弯曲的结果举行。我也很难将校准模式粘贴到真正平坦的表面上。最后,我使用了一个LCD显示器来显示图像,并移动了摄像机来获取校准图像,以确保不会在显示器上缩放图像;图像上的1个像素应该是监视器上的1个像素,并且不必是全屏。 这给了我最小的重投影误差

你的样本图像质量是否低于你的实际镜头?您可以清楚地看到,JPEG压缩算法在图像的边缘上创建了大量压缩伪影。这并不理想。如果这是您的实际镜头,我建议将压缩质量设置为最大,或使用无损格式,如PNG


通过用更好的候选图像替换一些校准图像,我能够将校准时间缩短一半

啊,我明白了。是的,它最终在2.5小时内完成了全部50幅图像,与Matlab校准工具箱的结果相比有一点差异。我还没有测量实际误差。是的,我没有使用合适的设备来拍摄图像,我是用DIY的方式拍摄的。哦,实际上上传的样本图像只是实际图像的一个屏幕截图,我用相机拍摄的原始图像进行了校准。我将在以后的实验中尝试你的建议。谢谢你,格温,我认为这个漫长的过程是个错误。啊,我明白了。是的,它最终在2.5小时内完成了全部50幅图像,与Matlab校准工具箱的结果相比有一点差异。我还没有测量实际误差。是的,我没有使用合适的设备来拍摄图像,我是用DIY的方式拍摄的。哦,实际上上传的样本图像只是实际图像的一个屏幕截图,我用相机拍摄的原始图像进行了校准。我将在以后的实验中尝试你的建议。谢谢你,格温,我认为这个漫长的过程是个错误。