标定之相机的内参和外参

我理解错了,相机内参矩阵和相机畸变参数是两个东西,而且好像实际pnp好像没有用到相机的外参矩阵。

内参我觉得主要就是指畸变参数。畸变又分为径向和切向畸变。畸变应该是比较好理解的对吧。

https://blog.csdn.net/sunboyiris/article/details/78082699

https://blog.csdn.net/sinat_16643223/article/details/110442795

外参呢,就是平移矩阵和旋转矩阵,两个坐标系之间的关系就可以用平移矩阵加旋转矩阵描述嘛,和tf一样,这个我之前总结过对吧。

https://blog.csdn.net/sinat_16643223/article/details/114649640

https://blog.csdn.net/sunboyiris/article/details/78082699

 

那我们标定的时候,标定板

 

 

相机外参难道是这个意思?

https://www.guyuehome.com/7689

 

相机外参似乎就是相机的位姿啊,相机外参是相机外部参数啊,相机外参不就是我们要求的相机位置么!!!!!!!!!!!!!!!!

http://www.baidu.com/link?url=fGc_0a9F1XZ5tveYx6jE7baW8SkihhDpf6bFDeYFzbT7Fi7PAKBsLhVMl5WbTqd6&wd=&eqid=ee0bcdbe0000796400000006605d9e30

https://www.jianshu.com/p/2db2b167fb90

 

 

是不是已知内参其他几个参数可以求外参就是pnp? 

 

标定是已知几个求相机内参?

我们这么想想,标定是不是已经知道特征点现实世界的三维坐标了,因为知道那些方格子的边长了嘛,而且知道像素点坐标。

 

http://blog.sina.com.cn/s/blog_15ff1a2ca0102xjd9.html

 

 

https://baijiahao.baidu.com/s?id=1603212014194819932&wfr=spider&for=pc

 

 

这里说了相机内参包括内参矩阵和畸变参数矩阵!!!!!这样就好理解说得通了。

也好理解ROS下标定就得到内参矩阵和畸变参数就可以了。做pnp也是用内参矩阵和标定参数就可以了。并没有外参。

https://blog.csdn.net/weixin_42872123/article/details/110468692?utm_term=%E7%9B%B8%E6%9C%BA%E7%9A%84%E5%A4%96%E5%8F%82%E6%9C%89%E4%BB%80%E4%B9%88&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-110468692&spm=3001.4430

 

 

 

只要获得 特征点的世界坐标(三维坐标)、2D坐标(像素坐标)、相机内参矩阵、相机畸变参数矩阵 以上四个参数即可以解得相机与标志物之间的外参(R旋转矩阵、T位置矩阵)

再回看这句话是不是有感觉了,这里都明确说了,是得到相机的外参!!!!!!!!

 

 

这个opencv里的标定程序明确说了就是计算相机内参矩阵和畸变系数。

 

相机标定是用于确定相机内参外参的过程,它是计算机视觉和机器人视觉中的重要步骤。在Python中,我们可以使用OpenCV库来进行相机标定。 以下是相机标定的大致步骤: 1. 收集相机标定所需的图像数据,这些图像应该包括不同位置和角度下的棋盘格图像。 2. 使用OpenCV中的findChessboardCorners函数来检测每个棋盘格角点的位置。 3. 使用calibrateCamera函数来计算相机内参和畸变系数。该函数需要输入棋盘格图像的坐标和实际世界坐标。 4. 使用solvePnP函数来计算每个棋盘格图像的外参。该函数需要输入棋盘格图像的坐标和实际世界坐标。 下面是一个示例代码,用于标定相机并获取内参外参: ```python import cv2 import numpy as np # 收集相机标定所需的图像数据 images = [...] # 棋盘格图像列表 objpoints = [] # 实际世界坐标列表 imgpoints = [] # 图像坐标列表 # 设置棋盘格的大小 pattern_size = (9, 6) # 遍历每张图像 for img in images: # 寻找棋盘格的角点 ret, corners = cv2.findChessboardCorners(img, pattern_size, None) # 如果找到棋盘格 if ret == True: objpoints.append(...) # 将实际世界坐标添加到列表中 imgpoints.append(corners) # 将图像坐标添加到列表中 # 计算相机内参和畸变系数 ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img.shape[::-1], None, None) # 计算每张棋盘格图像的外参 rmatrices = [] for i in range(len(objpoints)): ret, rmat, tvec = cv2.solvePnP(objpoints[i], imgpoints[i], mtx, dist) rmatrices.append(rmat) ``` 在上面的代码中,我们首先使用findChessboardCorners函数来检测每张棋盘格图像中的角点位置,并将它们存储在imgpoints列表中。然后,我们构建一个实际世界坐标列表objpoints,该列表包含每个棋盘格的实际世界坐标。接下来,我们使用calibrateCamera函数计算相机内参和畸变系数。最后,我们使用solvePnP函数来计算每个棋盘格图像的外参,将结果存储在rmatrices列表中。 通过运行上面的代码,我们可以得到相机内参矩阵mtx和畸变系数dist,以及每个棋盘格图像的旋转矩阵rmatrices和平移向量tvecs。这些参数可以在后续的计算机视觉和机器人视觉应用中使用。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值