2012-07-22 130 views
2

我正在使用opencv 2.4.2库检测边缘并在图像上查找四边形形状。寄托都打算顺利,直到我得到了这些编译错误'cvFindContours'未在此范围内声明,opencv 2.4.2,编译错误

../src/GoodFeaturesToDetect.cpp:198:109: error: ‘cvFindContours’ was not declared in this scope 
../src/GoodFeaturesToDetect.cpp:203:106: error: ‘cvContourPerimeter’ was not declared in this scope 
../src/GoodFeaturesToDetect.cpp:203:114: error: ‘cvApproxPoly’ was not declared in this scope 
../src/GoodFeaturesToDetect.cpp:206:64: error: ‘cvContourArea’ was not declared in this scope 

这里是我的头:

#include <opencv2/core/core.hpp> 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include <stdlib.h> 
#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace cv; 
using namespace std; 

void DrawLine(Mat img, Point start, Point end); 
vector<Point2f> FindCornersUsingGoodFeaturesToTrack(Mat toTrack); 
void ConnectPointsWithLine(Mat img,vector<Point2f> corners); 
void DrawQuad(Mat img, Point a, Point b, Point c, Point d); 
void DetectAndDrawQuads(Mat img); 

这里是调用该函数(或多个)

void DetectAndDrawQuads(Mat img){ 
     CvSeq* contours; 
     CvSeq* result; 
     CvMemStorage *storage=cvCreateMemStorage(0); 
     Mat gray; 
     cvtColor(img,gray,CV_BGR2GRAY); 
     cvFindContours(&gray,storage, &contours, sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE, Point(0,0)); 

     //Loop through all the contours discovered 
     //Figure out which ones form a quad 
     while(contours){ 
      result=cvApproxPoly(contours, sizeof(CvContour),storage, CV_POLY_APPROX_DP,cvContourPerimeter(contours)*0.02,0); 

     if(result->total=4 && fabs(cvContourArea(result, CV_WHOLE_SEQ)) > 20){ 
      CvPoint *pt[4]; 
      for(int i=0; i<4; i++) 
       pt[i]=(CvPoint*) cvGetSeqElem(result,i); 

      DrawQuad(gray,*pt[0],*pt[1],*pt[2],*pt[3]); 

     } 
     contours = contours->h_next; 
     } 

} 

DetectAndDrawQuads获取方法从main()调用..

这里是链接库

opencv_contrib opencv_flann opencv_legacy opencv_calib3d opencv_ml opencv_imgproc opencv_highgui opencv_objdetect opencv_core opencv_features2d 

我在Eclipse CDT的(Helois)工作

我将不胜感激任何提示。谢谢。

回答

0

事实证明,我打电话的方法来自openCv 2.0。如OpenCV 2.4.2中所述,我必须更改cvFindContours以查找Contours(...),cvApproxPoly以approxPolyDP等等。

+0

该方法仍然可用,但是,它更好地使用它们的C++等价物。 – Mohammad 2012-07-23 04:57:40

+0

它们被移动到opencv_legacy模块。将其标题和链接包含到传统库中,并且可以工作。但是最好用C++替换它们。 – Sam 2012-07-23 05:39:52

1

首先,你应该使用#include <>作为opencv标题(比如你的第一行,而不是第二行和第三行)。

cv(如cvFindContours)开头的方法来自旧版本的opencv C接口,并且与较新的C++接口分开。例如cvFindContouropencv2/imgproc/imgproc_c.h中定义,而不在opencv2/imgproc/imgproc.hpp中(注意_c.h部分)。

在附注中,您已包含stdlib.h两次。