Matlab R2022b使用Camera Calibrator工具箱张正友标定法进行相机标定附带标定前后对比代码

打开Camera Calibrator

在这添加你拍摄的图片


根据你每个方块的实际边长填写,我是15mm。

通俗一点,要k3就选3 Coefficients,否则为0;要p1、p2就选Tangential Distortion。然后进行计算。

可以点击右侧误差高的选中图像进行移除来提高精度。

移除后会自动重新计算,然后导出参数。

导出后在工作区查看变量

K就是IntrinsicMatrix

TangentialDistortion分别是p1,p2

RadialDistortion分别是k1,k2,k3(选用2 Coefficients为0不显示)

标定后效果如下:

标定前后对比代码:

python 复制代码
import cv2  
import numpy as np  
#IntrinsicMatrix
fx,cx,fy,cy=326.398894622712,284.954173978833,328.070507959748,218.798886581291
#TangentialDistortion
p1,p2=-0.000517178855500132,-0.00236634006321519
#RadialDistortion
k1,k2,k3=0.229371939302846,-0.194046239909587,0

def undistort_video(camera_matrix, dist_coeffs, video_source=0):  
    # 打开视频流  
    cap = cv2.VideoCapture(video_source)  
  
    # 读取第一帧以获取其尺寸  
    ret, frame = cap.read()  
    if not ret:  
        print("无法打开视频流或文件")  
        return  
  
    h, w = frame.shape[:2]  
  
    # 创建一个窗口用于显示校正前的视频  
    cv2.namedWindow('Original Video', cv2.WINDOW_AUTOSIZE)  
  
    # 创建一个窗口用于显示校正后的视频  
    cv2.namedWindow('Undistorted Video', cv2.WINDOW_AUTOSIZE)  
  
    while True:  
        # 读取视频帧  
        ret, frame = cap.read()  
        if not ret:  
            break  
  
        # 校正图像  
        undistorted_frame = cv2.undistort(frame, camera_matrix, dist_coeffs, None, camera_matrix)  
  
        # 显示校正前和校正后的视频  
        cv2.imshow('Original Video', frame)  
        cv2.imshow('Undistorted Video', undistorted_frame)  
  
        # 按'q'键退出  
        if cv2.waitKey(1) & 0xFF == ord('q'):  
            break  
  
    # 释放资源和关闭窗口  
    cap.release()  
    cv2.destroyAllWindows()  
  
# 假设你已经有了这些参数,这里只是示例值  
camera_matrix = np.array([[fx, 0, cx],  
                          [0, fy, cy],  
                          [0, 0,  1]], dtype=np.float32)  
dist_coeffs = np.array([k1, k2, p1, p2, k3], dtype=np.float32)  
  
# 注意:将 fx, fy, cx, cy, k1, k2, p1, p2, k3 替换为你的实际标定值  
  
# 调用函数  
undistort_video(camera_matrix, dist_coeffs)
相关推荐
沅_Yuan8 小时前
基于LSTM神经网络的锂电池SOH估算模型(NASA数据集)【MATLAB】
神经网络·机器学习·matlab·锂电池·nasa·soh
沅_Yuan9 小时前
基于KAN神经网络的锂电池SOH估算模型(NASA数据集)【MATLAB】
神经网络·机器学习·matlab·锂电池·nasa·soh
简简单单做算法11 小时前
基于PSO粒子群优化的Transformer-BiLSTM网络模型的时间序列预测算法matlab性能仿真
matlab·transformer·时间序列预测·bilstm·pso粒子群优化
ueotek11 小时前
Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理
python·matlab·ansys·zemax·光学软件
全栈开发圈11 小时前
新书速览|MATLAB数据分析与可视化实践:视频教学版
开发语言·matlab·数据分析
爱代码的小黄人12 小时前
MATLAB中for循环实现递减遍历(通用方法)
开发语言·matlab
Evand J12 小时前
【MATLAB代码介绍】使用EKF融合惯导和DVL(速度)的MATLAB仿真例程
matlab·ekf·滤波·定位·导航·卡尔曼滤波·非线性滤波
南宫萧幕12 小时前
自动控制原理|稳定性与劳斯判据 知识点+计算题+MATLAB实现全套笔记
笔记·matlab·控制
神仙别闹15 小时前
基于 MATLAB 实现的图像信号处理
开发语言·matlab·信号处理
Evand J15 小时前
【MATLAB程序】CV和CA模型组成的IMM(交互式多模型),基于粒子滤波PF,背景为三维目标跟踪定位。附源代码
matlab·目标跟踪·pf·粒子滤波·imm·交互式多模型