手把手教会你双目摄像头Matlab参数定标
作者:iNBC 发布时间:2022-02-11 16:31:44
一、前期准备
1、安装好python3,可以在anaconda中安装python3。
2、一个合适的双目摄像头。
3、一台可以运行Matlab的电脑。
4、一张棋盘图(可A4打印,若效果不佳,则可A3打印)。
棋盘图如下图所示:需要测量小方框的边长(一般单位为毫米:mm)。
二、使用双目摄像头(左+右)拍摄棋盘图
1、注意事项
注意:
1、左、右摄像头图像中必须包含单独的完整的棋盘图。
2、可适当前后、左右、上下翻转棋盘图,在符合上述条件1的情况下。
3、拍摄左右双目的照片40~50张比较合适。
如图所示:
2、双目拍照代码(python)
take_photo.py内容如下:
import cv2
import sys
#引入库
cap = cv2.VideoCapture(1) #读取笔记本内置摄像头或者0号摄像头
i = 0
while True:
ret, frame = cap.read()
if (ret):
cv2.namedWindow("Video01",0) #创建一个名为Video01的窗口,0表示窗口大小可调
#cv2.resizeWindow("Video01",1280,720) ##创建一个名为Video01的窗口,设置窗口大小为 1920 * 1080 与上一个设置的 0 有冲突
cv2.imshow("Video01", frame)
#等待按键按下
c = cv2.waitKey(1) & 0xff
#r若按下w则保存一张照片
if c ==ord("w"):
cv2.imwrite("./val_001/%d.bmp" %i, frame) #自己设置拍摄的照片的存储位置
print("Save images %d succeed!" %i)
i+=1
#若按下Q键,则退出循环
if c == ord("q"):
break
#随时准备按q退出
cap.release()
#关掉所有窗口
cv2.destroyAllWindows()
注意:
1、运行take_photo.py前,注意设置左右照片的存储位置。
2、运行take_photo.py后,按下键盘上的“W”
键拍摄一张照片。当拍摄的照片数量足够时,按下“Q”
键退出程序运行。
3、程序退出后,打开存储照片的文件夹查看照片是否合适。
3、双目左右照片分割(python)
resize.py内容如下:
import numpy as np
import cv2
#img1 = cv2.imread(r"/Users/inbc/Desktop/zuo/Left1.bmp")
#img2 = cv2.imread(r"/Users/inbc/Desktop/you/Right1.bmp")
for i in range(0,7) :
#imgT = cv2.imdecode(np.fromfile('./images/%d.bmp' %i ,dtype=np.uint8), -1)
imgT = cv2.imdecode(np.fromfile('./val/%d.bmp' %i ,dtype=np.uint8), -1) #读取拍摄的左右双目照片
# cv2.imshow("zuo", img1[300:1200, 500:2000])
# cv2.imshow("you", img2[300:1200, 500:2000])
# cv2.waitKey(0)
#设置左右照片的存储位置
cv2.imwrite("./val/zuo/reLeft%d.bmp" %i ,imgT[0:720, 0:1280] )#imgL的第一个参数是图片高度像素范围,第二个参数是图片宽度的像素范围
cv2.imwrite("./val/you/reRight%d.bmp" %i ,imgT[0:720, 1280:2560] )
print("Resize images%d Fnished!" %i)
print("Fnished All!!!")
注意:
1、运行resize.py前,注意设置左、右照片的分别的存储位置。
2、运行resize.py后,终端打印"Fnished All!!!"
表示分割完成。
3、程序退出后,打开存储照片的文件夹查看照片,是否分割完成,左摄像头照片存放在zuo,右摄像头照片存放在you。(文件名可自己更改)
三、Matlab双目参数标定
1、打开Matlab后,点开app
,找到Stereo Camera Calibrator
。如下图所示:
打开后如图所示:
2、导入双目的左右照片到Stereo Camera Calibrator
APP。具体操作,如下图所示:
3、点击确认后就可以分析导入的左右的照片了。这个过程会自动剔除掉不合格(误差过大)的左右照片。
4、导入照片后就可以进行双目定标了。
导入左右照片后,如图所示:
5、设置双目相机的定标参数,如图所示。
6、进行双目定标,并导出双目参数矩阵到Matlab中,进行下一步的处理。
四、双目参数提取
1、左、右相机内参数获取,注意参数矩阵的转置:
>> stereoParams.CameraParameters1.IntrinsicMatrix'#左相机参数
ans =
831.0889 -4.0855 659.4243
0 831.8663 487.3259
0 0 1.0000
>> stereoParams.CameraParameters2.IntrinsicMatrix'#右相机参数
ans =
831.1982 -3.5773 632.5308
0 832.1221 479.3084
0 0 1.0000
Matlab如图所示:
2、获取左右相机畸变系数。
注意: 左右相机畸变系数:[k1, k2, p1, p2, k3] ,顺序要正确。
# 左右相机畸变系数:[k1, k2, p1, p2, k3]
>> stereoParams.CameraParameters1.RadialDistortion
ans =
-0.0806 0.3806 -0.5229 #k1 k2 k3
>> stereoParams.CameraParameters1.TangentialDistortion
ans =
-0.0033 0.0005 #p1 p2
Matlab如图所示:
3、获取双目的旋转矩阵和平移矩阵,注意旋转矩阵的转置。
# 旋转矩阵
>> stereoParams.RotationOfCamera2'
ans =
1.0000 0.0017 -0.0093
-0.0018 1.0000 -0.0019
0.0093 0.0019 1.0000
# 平移矩阵
>> stereoParams.TranslationOfCamera2
ans =
-119.9578 0.1121 -0.2134
Matlab如图所示:
4、获取基线距离,单位:mm, 为平移向量的第一个参数(取绝对值)。
self.baseline = 119.9578 # 单位:mm, 为平移向量的第一个参数(取绝对值)
至此,双目摄像头的参数就定标完了。
耐心一点,慢慢来总会成功的!!!
来源:https://blog.csdn.net/qq_40700822/article/details/124251201
猜你喜欢
- 1.统一码(Unicode)Unicode也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。对于世界上所有的语言
- 导入模块from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc,"h
- 字符串是Python中最常用的数据类型1、创建字符串1.1 使用 ’ ’ 或 " &quo
- 在生活之中,我们想要去一个很远的地方,可能先走到坐车的地方,再从乘车去目的地。那么,我们是不是可以理解成函数嵌套也是这样,需要不同函数的组合
- 所使用python环境为最新的3.6版本Python中几种对文件的操作方法:将A文件复制到B文件中去(保持原来格式)读取文件中的内容,返回L
- 在蓝色看到的这个程序,不错!by:thornyzhl前天看到有个人写了能在网页中写字的程序,找不到了,我来个能擦写的....蛮有意思的阿.~
- 0、什么时候会用到virtualenv?假设系统中的两个应用,其中A应用对库LibFoo的版本要求为1,而B应用对同一个库LibFoo的版本
- 当请求 headers 中,添加一个name为 Accept,值为 application/json 的 header(也即“我”(浏览器)
- 无意中看到以前在电脑上保存的一个html页面,关于div水平垂直居中的问题。如何实现div水平垂直居中呢?1.已知宽高度水平垂直居中posi
- (1)方法一、直接用a标签的href+数据库中文件地址,即可下载。缺点:word excel是直接弹框下载,对于image txt 等文件的
- 1、很多B2C或者淘宝的卖家反应,下单了但没有支付的占有率超过30%,有的甚至到40%。对于冲动性消费的商品来说,这个70%左右的转化率其实
- 使用python删除excel表格重复行。# 导入pandas包并重命名为pdimport pandas as pd# 读取Excel中Sh
- pycharm出现no module named xlwt问题首先声明,我是初学者,今天按照书上步骤,创建Excel文件,当我的xlwt安装
- 本文实例分析了javascript定义变量时带var与不带var的区别。分享给大家供大家参考。具体分析如下:直接看实例里说明:<scr
- 一个3层嵌套列表mm=["a",["b","c",["inner&qu
- 编解码器在字符与字节之间的转换过程称为编解码,Python自带了超过100种编解码器,比如:ascii(英文体系)gb2312(中文体系)u
- 最近做网站期间遇到个问题,就是用到比较流行的lightbox效果,就是点击链接后会弹出个固定大小窗口,弹出后窗口下面的内容是被遮罩掉的,最近
- 1、find(sub[, start[, end]])在索引start和end之间查找字符串sub找到,则返回最左端的索引值,未找到,则返回
- 我们平日办公时用得最多的软件是Execl、Word或WPS Office等,你的计算机中一定储存着大量的XLS、DOC、WPS文件吧!网页制
- 在django项目根目录位置创建scrapy项目,django_12是django项目,ABCkg是scrapy爬虫项目,app1是djan