单目相机标定python+opencv

本文详细介绍了如何使用Python和OpenCV进行单目相机标定的过程,包括准备标定板图像、提取角点信息、亚像素点定位、相机标定计算、标定效果评估和矫正。通过20-30张棋盘格图片,计算出旋转矩阵和平移向量,实现相机的精准标定。
摘要由CSDN通过智能技术生成

1.标定过程 (棋盘格见文章末尾)

  1. 准备20-30张拍摄的标定板图像,以20张图片为例。
  2. 提取20张图片的的角点信息。
  3. 在上一步的基础上,提取亚像素点(精度更高的角点坐标)。
  4. 把找到的角点在图上画出来,显得更加直观。
  5. 相机标定计算,根据上面提取到的角点坐标信息和世界坐标系中的三维点进行计算。
  6. 对标定结果进行评价
  7. 查看标定效果——利用标定结果对棋盘图进行矫正 (两种方法)

2.python+opencv

这里选择python+opencv是因为使用方便,不用像c++那样一步步配置环境库。
注意:w h为棋盘格模板长边和短边规格(角点个数),根据自己的棋盘格设置

import cv2
import numpy as np
import glob
from numpy import array as matrix, arange

# 找棋盘格角点
# 阈值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# w h分别是棋盘格模板长边和短边规格(角点个数)
w = 7
h = 5

# 世界坐标系中的棋盘格点,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z坐标,记为二维矩阵,认为在棋盘格这个平面上Z=0
objp = np.zeros((w * h, 3), np.float32)  # 构造0矩阵,88行3列,用于存放角点的世界坐标
objp[:, :2] = np.mgrid[0:w, 0:h].T.reshape(-1, 2)  # 三维网格坐标划分

# 储存棋盘格角点的世界坐标和图像坐标对
objpoints = []  # 在世界坐标系中的三维点
imgpoints = []  # 在图像平面的二维点
record = []

images = glob<
单目相机标定是通过对相机内部参数(如焦距、主点坐标)和参数(如相机的位置和方向)进行估计,以及对图像畸变(例如径向畸变和切向畸变)进行校正来提高单目相机图像的准确性。下面是使用Python进行单目相机标定的基本步骤: 1. 准备一个适当的标定板,可以是棋盘格标定板或者其他特定模式的标定板。标定板的大小和图案要明显且清晰可见。 2. 采集多张包含标定板的图片,尽量保证角度、位置和距离的变化。一般来说,10至20张图片就足够。可以使用OpenCV库或其他图像处理库来读取和处理图片。 3. 对每张图片进行角点检测。角点是标定板上的交叉点,可以通过OpenCV的函数如`cv2.findChessboardCorners()`来自动检测。 4. 使用检测到的角点坐标进行内参数估计。可以使用解析解法或优化算法进行估计。解析解法通过线性方程组的求解来估计相机的内参数。优化算法则使用非线性优化方法,如Levenberg-Marquardt算法,来优化估计结果。 5. 根据估计的内部参数参数,利用畸变公式的线性方程组求解近似的畸变系数。畸变系数用于校正图像中的畸变。 6. 最后,使用非线性优化法对内部参数参数和畸变系数进行精确的计算和校正。这一步是为了提高标定结果的准确性。 以上是使用Python进行单目相机标定的基本步骤。具体的代码实现和更详细的说明可以参考相关的教程和文档。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [单目相机标定-python](https://blog.csdn.net/qq_19319481/article/details/129198152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值