使用OpenCV进行标定(Python)

本文详细介绍了如何使用OpenCV进行相机标定,包括检测棋盘格角点、标定、去畸变和反投影误差计算,提供Python代码示例。
摘要由CSDN通过智能技术生成

# 使用OpenCV进行标定(Python)

本人邮箱:sylvester0510@163.com,欢迎交流讨论,
欢迎转载,转载请注明网址http://blog.csdn.net/u010128736/



  本文结合OpenCV官方样例,对官方样例中的代码进行修改,使其能够正常运行,并对自己采集的数据进行实验和讲解。

一、准备

  OpenCV使用棋盘格板进行标定,如下图所示。为了标定相机,我们需要输入一系列三维点和它们对应的二维图像点。在黑白相间的棋盘格上,二维图像点很容易通过角点检测找到。而对于真实世界中的三维点呢?由于我们采集中,是将相机放在一个地方,而将棋盘格定标板进行移动变换不同的位置,然后对其进行拍摄。所以我们需要知道(X,Y,Z)的值。但是简单来说,我们定义棋盘格所在平面为XY平面,即Z=0。对于定标板来说,我们可以知道棋盘格的方块尺寸,例如30mm,这样我们就可以把棋盘格上的角点坐标定义为(0,0,0),(30,0,0),(60,0,0),···,这个结果的单位是mm。
  3D点称为object points,2D图像点称为image points。

这里写图片描述

二、检测棋盘格角点

  为了找到棋盘格模板,我们使用openCV中的函数cv2.findChessboardCorners()。我们也需要告诉程序我们使用的模板是什么规格的,例如8*8的棋盘格或者5*5棋盘格等,建议使用x方向和y方向个数不相等的棋盘格模板。下面实验中,我们使用的是10*7的棋盘格,每个方格边长是20mm,即含有9*6的内部角点。这个函数如果检测到模板,会返回对应的角点,并返回true。当然不一定所有的图像都能找到需要的模板,所以我们可以使用多幅图像进行定标。除了使用棋盘格,我们还可以使用圆点阵,对应的函数为cv2.findCirclesGrid()。
  找到角点后,我们可以使用cv2.cornerSubPix()可以得到更为准确的角点像素坐标。我们也可以使用cv2.drawChessboardCorners()将角点绘制到图像上显示。如下图所示:

使用OpenCV进行相机标定的过程中,可以使用Python进行编程。首先,需要采集相机的原始图像作为标定的准备工作。然后,可以使用OpenCV的函数来计算相机的内参和畸变参数。接下来,可以使用Python编写标定代码。例如,可以使用以下代码来调用OpenCVPython进行相机拍照: ```python import cv2 camera = cv2.VideoCapture(0) i = 0 while 1: (grabbed, img) = camera.read() cv2.imshow('img', img) if cv2.waitKey(1) & 0xFF == ord('j'): # 按下'j'键保存一张图片 i = 1 u = str(i) filename = str('./img' + u + '.jpg') cv2.imwrite(filename, img) print('写入:', filename) if cv2.waitKey(1) & 0xFF == ord('q'): break ``` 这段代码可以实现从摄像头中获取图像,并在按下'j'键时保存图片。在编写完标定代码后,可以通过比较标定前后的效果来评估标定的准确性。总结来说,通过使用PythonOpenCV,我们可以方便地进行相机标定的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [OpenCV 相机标定Python版)](https://blog.csdn.net/kkkkkk0729/article/details/119113267)[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: 33.333333333333336%"] - *2* [python利用opencv进行相机标定(完全版)](https://blog.csdn.net/dgut_guangdian/article/details/107467070)[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: 33.333333333333336%"] - *3* [Python使用OpenCV进行标定](https://download.csdn.net/download/weixin_38682086/12868969)[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: 33.333333333333336%"] [ .reference_list ]
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值