4,445
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/legacy/legacy.hpp"
using namespace std;
//by Huang, Haiqiao 25 Jun. 2011, fzyhhq@bift.edu.cn
//http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=14214
int main( )
{
cout<<"Draw Chess OpenCV!"<<endl;
char* filename="..//Image2.tif";
IplImage* imgRGB = cvLoadImage(filename);
IplImage* imgGrey = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);
if (imgGrey==NULL){//image validation
cout<< "No valid image input."<<endl;
char c=getchar();
return 1;
}
//-------find chessboard corners--------------
int corner_row=13;//interior number of row corners.(this can be countered by fingers.)
int corner_col=12;//interior number of column corners.
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(//returning non-zero means sucess.
imgGrey,// 8-bit single channel greyscale image.
pattern_size,//how many INTERIOR corners in each row and column of the chessboard.
corners,//a pointer to an array where the corner locations can be recorded.
&corner_count,// optional, if non-NULL, its a point to an integer where the nuber of corners found can be recorded.
CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS// check page 382-383.
);
cout<<"corner_count = "<<corner_count;
//-------Draw the corner pattern-------
cvDrawChessboardCorners(
imgRGB,
pattern_size,
corners,
corner_count,
found
);
//to summary a bit of findings.
cout<<"found="<<found<<endl;
cout<<"x="<<corners[2].x;
cout<<",y="<<corners[2].y<<endl;
cvNamedWindow("Find and Draw ChessBoard", 0 );
cvShowImage( "Find and Draw ChessBoard", imgRGB );
cvWaitKey(0);
cvReleaseImage(&imgGrey);
cvReleaseImage(&imgRGB);
cvDestroyWindow("Find and Draw ChessBoard");
return 0;
}