用opencv做棋盘格的标定

今天看了好多别人的程序,蒙圈的要命,书上的例子也长的吓人,后来就得不能蛮干,就找到一精简的程序研究起来,最后还是有模有样的运行出来了。现在奉献给像我一样苦苦探求的人。

#include <cv.h>
#include <highgui.h>
using namespace std;
int main()
{   
cout <<"CheckBoard Calibration !"<<endl;        
IplImage* img= cvLoadImage("ge.jpg",CV_LOAD_IMAGE_GRAYSCALE);//读取图像的灰度格式   
if (img==NULL)
{     
cout << "No valid image input."<<endl;           
return 0;   
}       
int corner_row=8;//表示一行中黑白格总和减一
int corner_col=11; //表示一列中黑白格总和减一  
int corner_n=corner_row*corner_col;//总共的角点
CvSize pattern_size=cvSize(corner_row,corner_col); //角点数 
CvPoint2D32f* corners = new CvPoint2D32f[corner_n];//存储角点的数组
int corner_count; //用来标识是否找到所有的角点

       //第一个大函数
int found=cvFindChessboardCorners(img,pattern_size,corners,&corner_count,
CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS);   
int half_win_size=3;//the window size will be 3+1+3=7   
int iteration=20;   
double epislon=0.1; 

       //第二个大函数
cvFindCornerSubPix(img,corners,corner_count,cvSize(half_win_size,half_win_size),cvSize(-1,-1),
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,iteration,epislon)); 

        //第三个大函数
cvDrawChessboardCorners(img,pattern_size,corners,corner_count,found);
cout<<"found="<<found<<endl;
for (int i = 0; i < corner_n; i++){//显示所有角点的坐标,共11*8个
cout << "NO. "<<i<<": x=" << corners[i].x;
cout << "y=" << corners[i].y << endl;
}
cvNamedWindow("Draw", CV_WINDOW_AUTOSIZE );   
cvShowImage( "Draw", img);    
cvWaitKey(0);    
cvReleaseImage(&img);    
cvDestroyWindow("Draw");     
return 0;
}

OpencvSharp是一个基于OpenCV的跨平台计算机视觉库,可以用于图像处理和模式识别。棋盘标定是其中一个常用的功能,用于相机的内部参数和外部参数的校准。 棋盘标定是通过拍摄一系列包含已知尺寸的棋盘图片,利用其对应的图像和物理坐标点之间的关系来估计相机的内部参数(如焦距、畸变等)和外部参数(如相机位置和姿态)。棋盘标定是相机标定的一种常用方法,因为棋盘的结构比较规则,容易被识别和定位。 使用OpencvSharp进行棋盘标定的步骤如下: 1. 拍摄一系列包含已知尺寸的棋盘图片,注意保持相机和棋盘的位置、姿态以及光照条件一致。 2. 导入OpencvSharp库并调用相机标定相关的函数。首先,需要创建一个棋盘对象,指定其行列数和尺寸。然后,读入棋盘图片,并使用函数来查找棋盘角点的位置。 3. 对于每张图片,如果成功地检测到角点,则将这些角点的图像坐标和对应的物理坐标存储起来。 4. 根据所有图片中的对应点,使用OpencvSharp提供的相机标定函数来计算相机的内部参数和外部参数。这些参数将被存储在相机矩阵和畸变系数矩阵中。 5. 根据计算得到的相机矩阵和畸变系数矩阵,可以对后续的图像进行去畸变处理或进行相机姿态估计等操作。 总结来说,OpencvSharp提供了一套方便易用的函数和方法来实现棋盘标定,通过拍摄包含已知尺寸的棋盘图片并结合相机标定的算法,可以准确地估计相机的内部参数和外部参数,从而提高计算机视觉系统的精度和稳定性。
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值