OpenCV Eye Detector Probleme

CodeCrafterCpp

Erfahrenes Mitglied
Hallo,
Ich habe ein Tutorial über ein Eyedetector gefunden....
Hier der Code:
C++:
#include "C:\Program Files\opencv2.3.1\include\opencv2\highgui\highgui.hpp"
#include "C:\Program Files\opencv2.3.1\include\opencv2\imgproc\imgproc.hpp"
#include "cvaux.h"
#include <iostream>


 
using namespace std;
using namespace cv;
 

void detectEyes(IplImage *img)
{

    /* detect faces */
    CvSeq *faces = cvHaarDetectObjects(
        img,            /* the source image */
        cascade_face,      /* the face classifier */
        storage,        /* memory buffer, created with cvMemStorage */
        1.1, 3, 0,      /* special parameters, tune for your app */
        cvSize(40, 40)  /* minimum detection scale */
    );
 
    /* return if not found */
    if (faces->total == 0) return;


	  /* get the first detected face */
    CvRect *face = (CvRect*)cvGetSeqElem(faces, 0);
 
    /* draw a red rectangle */
    cvRectangle(
        img,
        cvPoint(face->x, face->y),
        cvPoint(
            face->x + face->width,
            face->y + face->height
        ),
        CV_RGB(255, 0, 0),
        1, 8, 0
    );
 
    /* reset buffer for the next object detection */
    cvClearMemStorage(storage);
 

	   /* Set the Region of Interest: estimate the eyes' position */
    cvSetImageROI(
        img,                    /* the source image */
        cvRect(
            face->x,            /* x = start from leftmost */
            face->y + (face->height/5.5), /* y = a few pixels from the top */
            face->width,        /* width = same width with the face */
            face->height/3.0    /* height = 1/3 of face height */
        )
    );
 
	 /* detect the eyes */
    CvSeq *eyes = cvHaarDetectObjects(
        img,            /* the source image, with the
                           estimated location defined */
        cascade_e,      /* the eye classifier */
        storage,        /* memory buffer */
        1.15, 3, 0,     /* tune for your app */
        cvSize(25, 15)  /* minimum detection scale */
    );
 

	 int i;
   
    /* draw a rectangle for each detected eye */
    for( i = 0; i < (eyes ? eyes->total : 0); i++ ) {
        /* get one eye */
        CvRect *eye = (CvRect*)cvGetSeqElem(eyes, i);
       
        /* draw a red rectangle */
        cvRectangle(
            img,
            cvPoint(eye->x, eye->y),
            cvPoint(eye->x + eye->width, eye->y + eye->height),
            CV_RGB(255, 0, 0),
            1, 8, 0
        );
    }
 

	 /* reset region of interest */
    cvResetImageROI(img);
}

Aber ich bekomme 8 Errors...
Code:
Fehler	1	error C2065: 'cascade_f': nichtdeklarierter Bezeichner	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	17
Fehler	2	error C2065: 'storage': nichtdeklarierter Bezeichner	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	18
Fehler	3	error C2065: 'storage': nichtdeklarierter Bezeichner	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	43
Fehler	6	error C2065: 'cascade_e': nichtdeklarierter Bezeichner	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	61
Fehler	7	error C2065: 'storage': nichtdeklarierter Bezeichner	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	62
	8	IntelliSense: Der Bezeichner ""cascade_face"" ist nicht definiert.	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	18
	9	IntelliSense: Der Bezeichner ""storage"" ist nicht definiert.	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	19
	10	IntelliSense: Der Bezeichner ""cascade_e"" ist nicht definiert.	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	62

Was ist der Fehler bzw. was muss ich noch dazu schreiben?

mfG
 
Also, wenn ich den Code so ansehe, fällt mir auf, dass sämtliche Parameter-Variablen in diesen Codezeilen nicht definiert sind:

C++:
    /* detect faces */
    CvSeq *faces = cvHaarDetectObjects(
        img,            /* the source image */
        cascade_face,      /* the face classifier */
        storage,        /* memory buffer, created with cvMemStorage */
        1.1, 3, 0,      /* special parameters, tune for your app */
        cvSize(40, 40)  /* minimum detection scale */
    );

Weiter unten im Code siehts ähnlich aus. Du hast vergessen, die globalen Variablen/Objekte zu definieren:

C++:
CvHaarClassifierCascade *cascade_face;
CvHaarClassifierCascade *cascade_e;
CvMemStorage			*storage;

Im Übrigen gibts hier ein komplettes Beispiel in C: http://siri.lmao.sk/fiit/DSO/OpenCV_Eye_Detection_Source_Code/eyedetect.c
 
Beim Beispielcode von dir bekomme ich 2 Error und 3 Warnungen....
Code:
Fehler	5	error LNK1120: 1 nicht aufgelöste externe Verweise.	C:\Users\Jonas\Documents\Visual Studio 2010\Projects\CV0.0.1\Debug\CV0.0.1.exe
Fehler	4	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_cvHaarDetectObjects" in Funktion ""void __cdecl detectEyes(struct _IplImage *)" (?detectEyes@@YAXPAU_IplImage@@@Z)".	C:\Users\Jonas\Documents\Visual Studio 2010\Projects\CV0.0.1\CV0.0.1\testcv.obj
Warnung	2	warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	71
Warnung	3	warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust	c:\users\jonas\documents\visual studio 2010\projects\cv0.0.1\cv0.0.1\testcv.cpp	71
Warnung	1	warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	c:\program files\opencv2.3.1\include\opencv2\flann\logger.h	66
 
Ich bekomme immer noch Error....
Zeile 18 scheint ein Problem zu sein:
Code:
assert(argc == 2);
Und noch ein Foto von Fehler im Anhang...

Hoffe mir kann jemand helfen :D


mfG
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    88,4 KB · Aufrufe: 16
Wenn du von der IDE aus startest, musst du noch die Parameter angeben, die für das Debugging gebraucht werden. Du kannst bei den Projekt-Eigenschaften unter "Debugging" die "Befehlsargumente" festlegen. Wahrscheinlich musst du noch ein Bild bzw. den Pfad zu dem solchen als Argument angeben.

assert() ist ein Macro, das bei nicht Erfüllung der in der Klammer angegebenen Bedingung die komplette Applikation beendet (POSIX-Kompatible Systeme beenden dort mit SIGABRT - Abbruchsignal).
 
Der code ist oben von Saftmeister verlinkt ...

Ich hab das mit den Bild versuch...kommt immer noch Error hier noch ein paar Bilder...
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    95,3 KB · Aufrufe: 13
  • Unbenannt2.png
    Unbenannt2.png
    98,8 KB · Aufrufe: 11
Zuletzt bearbeitet von einem Moderator:
Zurück