编译提取棋盘格角点的的程序,但是一直显示cvFindChessboardCorners这个函数有问题,请大神指教!
错误如下:
../qt_subpix1/main.cpp: In function 'int main(int, char**)':
../qt_subpix1/main.cpp:14:19: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char* filename="1.jpg";
^
../qt_subpix1/main.cpp:20:12: warning: unused variable 'c' [-Wunused-variable]
char c=getchar();
../qt_subpix1/main.cpp:37:9: error: 'CV_CALIB_CB_ADAPTIVE_THRESH' was not declared in this scope
CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS// check page 382-383.
^../qt_subpix1/main.cpp:37:37: error: 'CV_CALIB_CB_FILTER_QUADS' was not declared in this scope
CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS// check page 382-383.
^
../qt_subpix1/main.cpp:38:4: error: 'cvFindChessboardCorners' was not declared in this scope
);
^
../qt_subpix1/main.cpp:58:4: error: 'cvDrawChessboardCorners' was not declared in this scope
);
^
../qt_subpix1/main.cpp: At global scope:
../qt_subpix1/main.cpp:11:5: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char** argv)
^
../qt_subpix1/main.cpp:11:5: warning: unused parameter 'argv' [-Wunused-parameter]
make: *** [main.o] Error 1
程序源码如下:
/* hellochess.cpp */
#include <iostream>
#include <stdlib.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <math.h>
using namespace std;
int main(int argc, char** argv)
{
cout << "Draw Chess OpenCV!"<<endl;
char* filename="1.jpg";
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=9;//interior number of row corners.(this can be countered by fingers.)
int corner_col=11;//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.
);
//-------------obtain subpixel accuracy on those corners-----------------------
int half_win_size=3;//the window size will be 3+1+3=7
int iteration=20;
double epislon=0.1;
cvFindCornerSubPix(
imgGrey,
corners,
corner_count,
cvSize(half_win_size,half_win_size),
cvSize(-1,-1),//no ignoring the neighbours of the center corner
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,iteration,epislon)
);
//-------Draw the corner pattern-------
cvDrawChessboardCorners(
imgRGB,
pattern_size,
corners,
corner_count,
found
);
//to summary a bit of findings.
//<<"found="<<found<<endl;
//cout<<"x="<<corners[2].x;
//cout<<",y="<<corners[2].y<<endl;
cvNamedWindow("Find and Draw ChessBoard", CV_WINDOW_AUTOSIZE );
cvShowImage( "Find and Draw ChessBoard", imgRGB );
cvWaitKey(0);
cvReleaseImage(&imgGrey);
cvReleaseImage(&imgRGB);
cvDestroyWindow("Find and Draw ChessBoard");
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。