OpenCV实现相机标定示例详解_第1页
OpenCV实现相机标定示例详解_第2页
OpenCV实现相机标定示例详解_第3页
OpenCV实现相机标定示例详解_第4页
OpenCV实现相机标定示例详解_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第OpenCV实现相机标定示例详解目录环境准备相机标定棋盘格图片实时显示相机的画面在线标定实时显示相机画面,按键保存能检测到角点的棋盘格图片离线标定畸变矫正

环境准备

vs2015+opencv4.10安装与配置

相机标定

棋盘格图片

可以自己生成,然后打印到A4纸上。(也可以去TB买一块,平价买亚克力板的,不反光买氧化铝材质,高精度买陶瓷的)

*生成棋盘格图片

intgenerateCalibrationPicture()

//Matframe=imread("3A4.bmp");//cols*rows=630*891

Matframe(1600,2580,CV_8UC3,Scalar(0,0,0));

intnc=frame.channels();

intnWidthOfROI=320;

for(intj=10;jframe.rows-10;j++)

uchar*data=frame.ptruchar

for(inti=10;i(frame.cols-10)*nc;i+=nc)

if((i/nc/nWidthOfROI+j/nWidthOfROI)%2)

//bgr

data[i/nc*nc+0]=255;

data[i/nc*nc+1]=255;

data[i/nc*nc+2]=255;

imshow("test",frame);

//imwrite("3.bmp",frame);

waitKey(0);

return0;

实时显示相机的画面

准备一个相机,我的是usb相机(罗技100多的)。

intdisplayCameraRealTime()

//1.从摄像头读入视频

VideoCapturecapture(0);

if(!capture.isOpened()){

std::cout"无法开启摄像头!"std::endl;

return-1;

//2.循环显示每一帧

while(1)

Matcam;

capturecam;//获取当前帧图像

namedWindow("实时相机画面",WINDOW_AUTOSIZE);

imshow("实时相机画面",cam);//显示当前帧图像

//imwrite(to_string(i)+".png",cam);

waitKey(20);//延时20ms

效果如下图:

在线标定

把打印的棋盘格固定在板子上

*实时检测角点,按键保存角点参数,达到数量执行标定并保存标定结果

*@paramnumBoards需要几张标定图片,即获取几组角点参数

*@paramboardSize格子尺寸Size7*4

*@paramsquareSize格子尺寸mm

*@paramflipHorizontal是否翻转

intcalibrateCameraRealTime(intnumBoards,cv::SizeboardSize,floatsquareSize=1,intdelay=50,boolflipHorizontal=false);

实时显示相机画面,按键保存能检测到角点的棋盘格图片

intsaveChessboardImages(cv::SizeboardSize,stringsavePath)

//1.从摄像头读入视频

VideoCapturecapture(0);

if(!capture.isOpened()){

std::cout"无法开启摄像头!"std::endl;

return-1;

if(savePath!="./")

myMkdir(savePath);

//2.循环显示每一帧

while(1){

Matimage0,image;

captureimage0;

//将图像复制到image

image0.copyTo(image);

//查找标定板(不对称圆网格板)

vectorPoint2fcorners;

//boolfound=findCirclesGrid(image,boardSize,corners,CALIB_CB_ASYMMETRIC_GRID);

boolfound=findChessboardCorners(image,boardSize,corners,CALIB_CB_FAST_CHECK);

//画上去

drawChessboardCorners(image,boardSize,corners,found);

intaction=waitKey(30)255;

//判断动作

if(action==ACTION_SPACE){//用户按下了空格

if(found){

//保存图片

stringimgFileName=savePath+getCurrentTime()+".png";

imwrite(imgFileName,image0);

coutimgFileName"saved"endl;

else{

printf("%s\n","未检测到角点");

elseif(action==ACTION_ESC){//用户按下了ESC

break;

cv::imshow("Calibration",image);

cv::destroyAllWindows();

return1;

离线标定

*离线相机标定

*@paramimagePath标定图片存放路径

*@paramboardSize格子尺寸Size7*4

*@paramsquareSize格子尺寸mm

intcalibrateCameraOffLine(stringimagePath,constSizeboardSize,floatsquareSize=1);

畸变矫正

*去畸变1、本地图片2、实时相机图像

*@par

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论