一、使用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 720
int 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;
}
二、使用matlab2018标定相机参数
1.内参
IntrinsicMatrix对应内参,注意这个和OpenCV中是转置的关系,注意不要搞错。
2.畸变参数
RadialDistortion:径向畸变,摄像头由于光学透镜的特性使得成像存在着径向畸变,可由K1,K2,K3确定。
NOTE:
- matlab选择3 Coefficients,则是K1,K2,K3三个参数非线性拟合;畸变不严重的情况下可以选择2 Coefficients,这样径向畸变就由K1,K2确定,K3为0。
- 对于畸变较小的图像中心区域,主要是k1起作用;对于畸变较大的边缘区域主要是k2起作用。普通相机这两个系数就够用了,对于鱼眼相机这种畸变特别大的才用的上第三个参数k3
TangentialDistortion:切向畸变,由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数P1,P2确定。
opencv使用时,需要注意参数的排放顺序,即K1,K2,P1,P2,K3。千万不要以为k是连着的。
ref:
https://blog.csdn.net/ktigerhero3/article/details/83039964
https://blog.csdn.net/moonshapedpool/article/details/83105526
https://blog.csdn.net/yanli33/article/details/60478023
https://blog.csdn.net/Loser__Wang/article/details/51811347