OpenCV相机标定:通过棋盘格计算相机内参矩阵和畸变系数

1、环境准备

pip install numpy opencv-python glob2 pyyaml

上面是 Python 中常用的库:

  • numpy:

    • 功能: 用于科学计算,提供高效的数组操作和数学函数。
    • 用途: 处理多维数组、矩阵运算、线性代数、傅里叶变换等。
  • opencv-python:

    • 功能: 用于计算机视觉和图像处理。
    • 用途: 图像和视频处理、对象检测、特征提取、摄像头输入等。
  • glob2:

    • 功能: 用于文件路径匹配。
    • 用途: 查找符合特定模式的文件路径,常用于批量处理文件。
  • pyyaml:

    • 功能: 用于解析和生成 YAML 文件。
    • 用途: 读取和写入 YAML 配置文件,适合存储和传输结构化数据。

2、准备棋盘格

https://calib.io/pages/camera-calibration-pattern-generator

  • 下图刚好是一张A4纸大小,14x18的格子,将棋盘格另存为PDF:
    在这里插入图片描述
  • 使用需要标定的相机进行拍照,多拍一些不同角度的,例如下面这样:
    在这里插入图片描述

3、标定代码

3.1Python代码实现如下:
import numpy as np
import cv2
import glob
import yaml

# ==================== 可修改参数 ====================
# 棋盘格尺寸 (行数, 列数) - 指的是棋盘格的方格数量
CHESSBOARD_SQUARES = (18, 14)

# 角点检测精度参数
CRITERIA = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# 图片文件类型
IMAGE_FORMAT = 'access/image/*.png'

# 校准结果保存文件名
OUTPUT_FILE = "access/calibration_matrix.yaml"

# ================================================

def main():
    # 计算内部角点的数量
    chessboard_size = (CHESSBOARD_SQUARES[0] - 1, CHESSBOARD_SQUARES[1] - 1)

    # 准备对象点,例如 (0,0,0), (1,0,0), ..., (16,12,0)
    objp = np.zeros((chessboard_size[0] 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值