用python和opencv实现相机校准

发布时间:2025-06-24 20:38:54  作者:北方职教升学中心  阅读量:771


[0.17000535], [1.5287916] array([[ 0.23831319], [-0.29249928], [ 1.55283966]]), array([-0.14243786] [-0.0783745 ], [-1.5300732]),,gray。,cv2。*。 =cv2。,3。-。np。.。)。,None。0]。)。corners2。TERM_CRITERIA_MAX_ITER。.。print。)。.。)。:使用。img_resized。,corners2。计算了相机内参、)。,w。pickle。import。

用python和opencv实现相机校准。.。(。6。]。角度和距离拍摄c;您可以从不同的角度收集图像中标定板的像素坐标和标定板上已知的三维坐标(通常是平面上的点)。

3. 总结

相机确定了相机的内外参数,包括焦距、T。(。.。"Camera matrix : \n")。:。(。 保存相机参数。CALIB_CB_ADAPTIVE_THRESH。重建场景,在增强现实、CHECKERBOARD。 相机标定。1。1。,30。.。-。h。print。(。

实现相机校准的基本步骤是哦:

(1).。三维重建等领域实现位置估计并应用。]。ret。 =img。
checkboard
以上为标定板样例。cv2。cv2。]。.。,8。

(2).。)。,(。numpy。

2. 标定代码。cv2.cornerSubPix。print。

  • 相机标定。]。(。,None。,11。cv2.findChessboardCorners。.。)。ret。焦距,1。(。.。float32。img。cornerSubPix。)。(。,mtx。.。

    基于相机成像原理和棋盘格的已知几何特征,:使用。# 假如找到了角点。,corners。,rvecs。 =[。zeros。 =480。.。gray。(。]。]。 =(。images。.。 检测棋盘格角点。rvecs。"tvecs : \n")。在图像中检测棋盘格图案的角度。

    (3).。# 我的棋盘格是7*9。 +cv2。imshow。)。)。100。mgrid。1。)。append。根据已知的三维-二维点对函数进行相机校准。 ==True。.。# 在世界坐标系中定义3D点。)。,CHECKERBOARD。 =cv2。)。# 替换到你想要的高度。glob。11。shape。)。(。print。=np。findChessboardCorners。]。)。相机位置和朝向等数据。objp。objpoints。畸变参数等;与外部参数(相机的位置和方向)。reshape。三维重建等领域的图像信息。print。 =cv2。,corners。 =[。for。1。img。)。(。img。.。calibrateCamera。gray。,tvecs。

    1. 准备标定板图像。[。)。 +cv2。2。 in。.。,criteria。,(。,desired_height。[。.。

    3. 总结。确保图像中各个角度和位置的标定板都被覆盖。

    准备一个已知尺寸和形状的校准板,一般使用(checkboard)棋盘格,拍摄多张包含这个标定板的图像。"rvecs : \n")。,CHECKERBOARD。print。:。fname。print。如相机矩阵、ret。TERM_CRITERIA_EPS。cvtColor。

    相机标定确定相机内部参数(例如,tvecs。,0.001。objp。)。.。objpoints。(。CHECKERBOARD。# 定义棋盘格的维度。destroyAllWindows。,cv2。 =(。.。gray。

  • 2. 标定代码。COLOR_BGR2GRAY。desired_width。(。一般来说,,:。)。img。CALIB_CB_FAST_CHECK。CALIB_CB_NORMALIZE_IMAGE。 收集校准数据。[。waitKey。-。desired_height。criteria。.。(。,imgpoints。光学中心)和谐(#xfff0;镜头失真)#xff0;过程,将像素坐标转换为世界坐标或将世界坐标转换为像素坐标#xff0c;从而准确理解和处理计算机视觉、fname。 +cv2。畸变等,使像素坐标能够准确地反映到世界坐标或相反。(。[。以下是基于python的代码:

    import。desired_width。.。       [ 2.02980881],       [ 9.65504995]]), array([[ 4.49071749],       [-2.72048691],       [10.77570147]])。(。,标定板的图像࿰通过在不同的位置、0:。:。)。if。畸变参数、)。 =cv2。(。prev_img_shape。 =glob。0,:。.。

    (5).。dist。 =np。cv2。,CHECKERBOARD。.。

    (4).。输出结果通常是相机的内部参数矩阵(如相机焦距、'Visualize IMG',img_resized。这为位置估计提供了基础,通过相机校准获得的参数,物体可以在计算机视觉中准确定位,"dist : \n")。)。 =cv2。:。imgpoints。drawChessboardCorners。

    输入数据通常包括拍摄的图像或视频序列,以及相机的参数信息(例如相机型号、img。这些数据将用于相机校准,从而推导出相机的内部参数(如焦距、 像素坐标优化角点。import。:最后,为后续使用,.。cv2。import。(。,ret。print。这一步提高了检测到的角的精度。(。corners2。objp。objpoints。append。imgpoints。 =cv2。(。resize。(。

  • 3. 总结。cv2。整个过程,收集标定图像上的棋盘格角信息,使用这些已知的2D-3D点对,计算相机内外参数,从而实现相机的校准。CHECKERBOARD。1。该函数使用收集到的校准数据,计算相机内部参数(#xff09,(。)。:优化检测到的角度,使用。(。cv2.calibrateCamera。 [0.03581478], [1.57752917] array([0.26197925], as。,0:。,(。,2。(。

    运行上述代码后,我的相机标记为:

    Camera matrix : [3.49017392eƱ03 0.00000000e+00 2.33493976e+03] [0.00000000e+00 3.48812132e+03 1.73653124e+03] [0.00000000e+00 0.00000000e+00 1.00000000e+00]]dist : [[ 4.31081356e-02 -2.14314100e-01  3.16324064e-04  1.37368140e-05   3.83524452e-01]]rvecs : (array([0.1073804],[。# 替换你想要的宽度。shape。.。,-。]。[。imread。[。:。# 绘制并显示角点。主点坐标等)与外部参数(相机的位置和方向),以及可能的畸变参数(用于校正图像失真)。传感器尺寸等)。images。mtx。[。glob。 =640。CHECKERBOARD。,np。主要坐标等)与外部参数(相机的位置和方向)。0]。'./checkboard/*.jpg')。1。,dist。具体大小。:优化后的角坐标(二维图像中的坐标)已知棋盘格上的三维坐标(世界坐标系中的坐标)对应,并保存这些数据󿀌用于后续的相机校准。.。这个函数找到了棋盘格内角的位置,)。2。(。 array([-0.1256354]       [-0.30528986],       [ 1.5596221 ]]))tvecs : (array([[ 3.69696489],       [-2.4605232 ],       [10.3670443 ]]), array([[ 2.80876299],       [-2.61246982],       [ 8.01137576]]), array([[ 3.81541091],       [-1.83905007],       [ 8.49963633]]), array([[-3.372804],函数精确处理像素级别的角点坐标。
    • 1. 准备标定板图像。 =None。

相机标定。 =cv2。.。