为什么python的标定要比opencv相机长30分钟?

2024-10-02 12:38:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图复制this camera calibration code。在

当我运行脚本时,校准过程在大约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)

这是我的校准图像样本 enter image description here


Tags: sampleinimportnoneimgnpvalcv2
1条回答
网友
1楼 · 发布于 2024-10-02 12:38:39

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

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

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

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

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

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

相关问题 更多 >

    热门问题