手把手教会你双目摄像头Matlab参数定标

目录
  • 一、前期准备
  • 二、使用双目摄像头(左+右)拍摄棋盘图
    • 1、注意事项
    • 2、双目拍照代码(python)
    • 3、双目左右照片分割(python)
  • 三、Matlab双目参数标定
  • 四、双目参数提取
  • 总结

一、前期准备

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 CalibratorAPP。具体操作,如下图所示:

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, 为平移向量的第一个参数(取绝对值)

至此,双目摄像头的参数就定标完了。

耐心一点,慢慢来总会成功的!!!

总结

到此这篇关于双目摄像头Matlab参数定标的文章就介绍到这了,更多相关双目摄像头Matlab参数定标内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Matlab中 sort 函数用法

    (1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序. eg: A=[1,5,3],则sort(A)=[1,3,5] A=[1,5,3;2,4,1],则sort(A)=[1,4,1;2,5,3] (2)B=sort(A,dim),对数组按指定方向进行升序排序, dim =1,表示对每一列进行排序,,dim=2表示对每一行进行排序. (3)B=sort(A,dim,mode),mode为指定排序模式,mode为"ascend"时,

  • Matlab实现数据的动态显示方法

    对于真实系统或者仿真平台,数据是增量式的产生的.Matlab除了强大的矩阵运算外,还具有强大的数据可视化库.由于静态画图的方法较多,本文只针对增量式数据流的动态显示.本文主要介绍几种Matlab实现数据的动态显示方法.方法主要有两种: hold on set函数与drawnow函数组合 hold on 方法 1. 方法介绍 此种方法比较原始,适合于即时数据,原理是先画上一帧,接着保留原始图像,追加下一幀图像,此种方式比较繁琐,涉及画图细节,并且没有完整并连续的Line对象数据.此种方法需要注意的

  • matlab灰度图像调整及imadjust函数的用法详解

    matlab--imadjust函数作用: 对进行图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵 在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J=imadjust( I ) 对图像I进行灰度调整 J=imadjust( I,[low_in;high_in],[low_out;high_out]) [low_in;high_in]为原图像中要变换的灰度范围,[low_out;high_out]为变换后的灰度范围 J=imadjust( I,[l

  • 简述Matlab中size()函数的用法

    size()函数用来获取矩阵的行数和列数. (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size(A), 当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c. (3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数.其中r=size(A,1)该语句返回的时矩阵A的行数, c=si

  • 手把手教会你双目摄像头Matlab参数定标

    目录 一.前期准备 二.使用双目摄像头(左+右)拍摄棋盘图 1.注意事项 2.双目拍照代码(python) 3.双目左右照片分割(python) 三.Matlab双目参数标定 四.双目参数提取 总结 一.前期准备 1.安装好python3,可以在anaconda中安装python3. 2.一个合适的双目摄像头. 3.一台可以运行Matlab的电脑. 4.一张棋盘图(可A4打印,若效果不佳,则可A3打印). 棋盘图如下图所示:需要测量小方框的边长(一般单位为毫米:mm). 二.使用双目摄像头(左+

  • Python+OpenCV+pyQt5录制双目摄像头视频的实例

    起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写一个.要是OpenCV+python.貌似很简单就能OK的事情,但是,我们的项目不是一般要展示给老师看嘛.谁愿意看一个没有界面的录制过程是吧~,最后会附上源代码~ 依赖的包 在这里,我直接把import的包写出来了各位可以进行对号入座,然后就能知道需要安装哪个包啦! import cv2 import numpy as np from PyQt5.QtWidge

  • 基于Opencv实现双目摄像头拍照程序

    本文实例为大家分享了Opencv实现双目摄像头拍照程序的具体代码,供大家参考,具体内容如下 我用的双目摄像头是一根usb线接入电脑.运行环境是vc2015,opencv3.0.将左右两个摄像头拍到的图片分别保存起来. 贴出代码(C++) #include"stdafx.h" #include<iostream> #include<string> #include<sstream> #include<opencv2/core.hpp> #i

  • 手把手教会你使用redux的入门教程

    目录 Redux详解 Redux介绍 Redux有什么作用 如何在React中使用Redux 如何使用React-redux Redux详解 Redux介绍 Redux 是 JavaScript 应用的状态容器,提供可预测的状态管理. 在Redux中有3个原则 单一数据源 整个应用的State被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个Stroe中. State 是只读的 唯一改变State 的方法就是触发Actions,Actions是一个用于描

  • Android开发教程之调用摄像头功能的方法详解

    本文实例讲述了Android调用摄像头功能的方法.分享给大家供大家参考,具体如下: 我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码 摄像头权限: <uses-permission android:name="android.permission.CAMERA"/> SD卡读写权限: <uses-permission androi

  • python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from_camera_local(folder_path): cap = cv2.VideoCapture(0) i = 1 while True: ret, frame = cap.read() cv2.imshow("capture", frame) print str(i) cv2.imw

  • Java+OpenCV调用摄像头实现拍照功能

    目录 环境准备 制作主界面 整体结构介绍 核心代码与知识点讲解 JPanel中如何显示摄像头的图像 OpenCV调用摄像头 使用摄像头拍照 完整代码 OpenCVUtil.java ImageUtils.java FileBean.java VideoPanel.java TakePhotoProcess.java FaceRecognize.java(核心主类) 随着我们对环境.Mat基本使用越来越熟练.Java Swing也逐步熟悉了起来.今天我们开始进入OpenCV驱动摄像头的几个使用场景

  • Python OpenCV超详细讲解读取图像视频和网络摄像头

    0.准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库. 1.读取图像调用imread()方法获取我们资源文件夹中的图片使用imshow()方法显示图片,窗口名称为OutputwaitKey(0)这句可以让窗口一直保持,如果去掉这句,窗口会一闪而过 我们来看下效果: 2.读取视频VideoCapture()方法的参数就是视频文件循环中通过read不断地去读视频的每一帧,再通过imshow显示出来最后if语句代表按q可以退出程

  • 详解OpenMV图像处理的基本方法

    目录 一.图像处理基础知识 二.OpenMV图像处理的基本方法 1. 感光元件 相关名词解释 2. 图像的基本运算 3. 使用图像的统计信息 4. 画图 5. 寻找色块 6. AprilTag实现标记跟踪 6. 模版匹配NCC 7. 多模版匹配 8. 特征点检测 9. 测距 10. 扫码识别 11. 颜色形状同时识别 12. 颜色模版匹配同时识别 13.分辨不同人脸 14. 高级特征 一.图像处理基础知识 1.摄像头:光学信号转换成电信号.计算机视觉中,最简单的模型是小孔成像模型. 小孔成像是一

  • OpenCV NAO机器人辅助捡球丢球流程分析

    目录 1. 概述 2. 相关技术 2.1 NAO机器人 2.2 Choregraphe 3. 总体设计与详细设计 3.1 系统模块划分 3.2 主要功能模块 4 视频展示 1. 概述 NAO机器人身高58cm,体重5.4kg.主要硬件包括CPU.主板.扬声器.话筒.红外线.相机.超声波(声呐).传感器.电机.语音合成器.陀螺仪等.实验室中NAO机器人的型号为NAOH25,其构造如下: NAO机器人的操作系统为Gentoo Linux,它支持Windows.Linux.Mac OS等操作系统的远程

随机推荐