python使用opencv实现相机内参标定

2 篇文章 0 订阅
2 篇文章 0 订阅

 一、背景介绍

        我们在根据相机拍摄的图像,计算世界坐标,指引机器人执行各种操作。前提是需要知道相机的内外参数,这篇文章主要是讲解python使用opencv实现相机内参标定的代码,如果想了解更详细的原理,可以参考其他的文章。

二、标定工具

1、棋盘格标定板,标定板的尺寸根据具体情况来定,推荐标定板在线生成网站:Camera Calibration Pattern Generator – calib.io,在这个网站设置好标定板的参数,左侧会自动生成相应的标定板,可以下载保存成PDF,自己可以打印(1:1),也可以将此文件发送给标定版制作的人。

 2、相机。

三、详细代码

1、主要用到的函数:

(1)ret, corners = cv2.findChessboardCorners(gray, (row_num, col_num), None)

  • 函数功能:根据相机拍到的标定板画面,找到标定板的角点,存入corners,ret是找到角点的flag
  • 参数介绍:

        gray:相机采集到的灰度图像;

        row_num:标定板行角点数;

        col_num:标定板列角点数;

(2)ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, size, None, None)

  • 函数功能:根据多张标定板图片找到的多组标定版角点,进行标定, mtx:内参数矩阵,dist:畸变系数,rvecs:旋转向量,tves:平移向量
  • 参数介绍:

        obj_points:多组标定版角点的世界坐标,左上角的角点为[0,0];

        img_points:检测到的多组标定板角点,是像素点;

        size:灰度图像的h,w。

2、执行过程:

(1)通过调整相机或者标定版,采集多种姿态的数据(一般会让标定板出现在相机的各个位置,同时带有旋转、倾斜的变化,这样会让标定更加精确),执行1的函数,得到多组corners数据;

(2)执行1的函数,得到最终的相机内参,包括mtx:内参数矩阵,dist:畸变系数,rvecs:旋转向量,tves:平移向量。

3、代码

需要具体详细的代码,可以去本人资源链接下载https://download.csdn.net/download/u012803927/88251638

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个广泛使用的计算机视觉库,可以用于处理图像和视频数据,支持各种特征提取,对象检测,跟踪,识别等视觉任务。其中相机标定是计算机视觉领域中一个非常重要的问题,它涉及到了相机内参,外参的估计和矫正,是各种视觉任务的基础。张正友相机标定算法是一种经典的方法,它可以通过使用多个不同角度拍摄的物体的多个图片来提取相机内参和外参。 在OpenCV中,实现张正友相机标定算法,步骤如下: 1.读取图像。首先,您需要使用OpenCV中的imread()函数从磁盘上读取每个图像。 2.提取角点。接下来,您使用cv2.findChessboardCorners()函数或cv2.findCirclesGrid()函数来检测图像中的棋盘格的角点或圆形略点。它会输出包含每个角点位置的坐标向量。 3.对角点进行亚像素级别的精确测量。然后,使用cv2.cornerSubPix()函数进行亚像素级别的精确测量。 4.初始化对象点和图像点。现在,你需要设置对象点(相对于相机坐标系统的点)和图像点(图像坐标上对应的点)来进行标定。 5.运行相机标定算法。使用cv2.calibrateCamera()函数来运行相机标定算法,它会返回内部参数矩阵和畸变系数矩阵。 6.矫正畸变。使用cv2.undistort()函数来进行畸变矫正,这将产生更准确的图像。 7.评估标定结果。最后,您可以使用cv2.projectPoints()函数将对象点投影到图像空间,并与标准图像比较来评估标定结果的准确性。 总的来说,通过使用OpenCV和张正友相机标定,您可以很容易地优化相机的几何校正,从而提高各种计算机视觉任务的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值