2

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

私はEclipseCDT(Helois)に取り組んでいます

ヒントをいただければ幸いです。ありがとう。

4

2 に答える 2

1

まず、#include <>opencvヘッダーに使用する必要があります(2行目と3行目とは対照的に、最初の行のように)。

cvlikeで始まるメソッドcvFindContoursは、古いopencv Cインターフェースからのものであり、新しいC++のものとは別のものです。たとえば、cvFindContourで定義され、で定義されopencv2/imgproc/imgproc_c.hていませんopencv2/imgproc/imgproc.hpp(一部に注意してください_c.h)。

ちなみに、あなたはstdlib.h2回含めました。

于 2012-07-22T23:57:31.963 に答える
0

私が呼び出していたメソッドはopenCv2.0からのものであることがわかりました。OpenCV 2.4.2で説明されているように、cvFindContoursをfindContours(...)に、cvExamplePolyをapproxPolyDPに変更する必要がありました。

于 2012-07-23T04:36:55.083 に答える