用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;
}

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 51
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值