失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 双目相机标定流程(使用opencv采集图像 使用matlab标定相机参数)

双目相机标定流程(使用opencv采集图像 使用matlab标定相机参数)

时间:2019-04-21 07:42:09

相关推荐

双目相机标定流程(使用opencv采集图像 使用matlab标定相机参数)

一、使用opencv采集双目图像

1.准备标准棋盘并打印

这里我们使用OpenCV提供的sample程序中的标定图片,图片位于opencv(C++版本)的安装路径:opencv\sources\samples\data下。使用打印机打印图片,注意不要选择适应边框,直接原大小打印,这样每一个小方格子的边长就是26mm(实际测量)。

2.摄像头采集双目图像并且保存

标定图片需要使用标定板在不同位置、不同角度、不同姿态下拍摄,以10~20张为宜。标定板需要是黑白相间的矩形构成的棋盘图,制作精度要求较高。下面代码是使用opencv读取双目照片,进行分割之后将左右相机的的照片分别保存道相应的文件夹下。用户在使用的时候只需要修改文件夹放置的位置即可。按C键采集一次图片。

#include <unistd.h>#include <iostream>#include <opencv2/opencv.hpp>#include <fstream>#include <cstdio>using namespace cv;using namespace std;#define WIDTH 2560#define HEIGHT 720int main() {char c = 0;VideoCapture capture(0);Mat cam;int i = 0;if (!capture.isOpened()){cout<<"can not open the camera"<<endl; cin.get(); exit(1);}capture.set(CAP_PROP_FRAME_WIDTH, WIDTH);capture.set(CAP_PROP_FRAME_HEIGHT, HEIGHT);string pathNameLeft = "/media/nvidia/34EE-34E53/SavedImages/Left/Left";string pathNameRight = "/media/nvidia/34EE-34E53/SavedImages/Right/Right";string formatName = ".jpg";string num;string fileNameL;string fileNameR;while (capture.read(cam)) //循环读取摄像画面帧capture >> cam{int w, h ;w= cam.cols; //获取相机画面宽高h= cam.rows;imshow("cam",cam); Rect rect0(0, 0, w/2, h); //(x,y,width,height)定义矩形框截取Mat caml = cam(rect0); //截取左摄像头画面Rect rect1(w/2, 0, w/2, h);Mat camr = cam(rect1); //截取右半边c = waitKey(10);if(c == 'c') //按c键采集图像{num = to_string(i);fileNameL = pathNameLeft + num + formatName;fileNameR = pathNameRight + num + formatName;imwrite(fileNameL, caml);imwrite(fileNameR, camr);++i;cout<<"capture ok!"<<endl; //每次截取成功打印一次,图片保存在工程的编译目录下}c = waitKey(10);if (c == 'q')//按q键退出 ,27为Esc键{break;}}return 0;}

二、使用matlab标定相机参数

1.内参

IntrinsicMatrix对应内参,注意这个和OpenCV中是转置的关系,注意不要搞错。

2.畸变参数

RadialDistortion:径向畸变,摄像头由于光学透镜的特性使得成像存在着径向畸变,可由K1,K2,K3确定。

NOTE:

matlab选择3 Coefficients,则是K1,K2,K3三个参数非线性拟合;畸变不严重的情况下可以选择2Coefficients,这样径向畸变就由K1,K2确定,K3为0。对于畸变较小的图像中心区域,主要是k1起作用;对于畸变较大的边缘区域主要是k2起作用。普通相机这两个系数就够用了,对于鱼眼相机这种畸变特别大的才用的上第三个参数k3

TangentialDistortion:切向畸变,由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数P1,P2确定。

opencv使用时,需要注意参数的排放顺序,即K1K2P1P2K3。千万不要以为k是连着的。

ref:

/ktigerhero3/article/details/83039964

/moonshapedpool/article/details/83105526

/yanli33/article/details/60478023

/Loser__Wang/article/details/51811347

/chay/p/7551151.html

/voyagee/p/7524946.html

如果觉得《双目相机标定流程(使用opencv采集图像 使用matlab标定相机参数)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。