Kann mir jemand erklären, was detectMultiScale in openCV

Ich versuche schon objectDetection in openCV..

Folgte ein paar Schritte..

  1. Ändern der Größe 64x64 Auflösung
  2. Ändern, Graustufen
  3. Abrufen von XML für die Objekterkennung
  4. Zeichnung Rechteck Umrandung das Muster

Dennoch konnte ich nicht erreichen..

Hier ist mein code :

#include<iostream>
#include "cv.h"
#include "highgui.h"
#include<vector>

using namespace cv;
using namespace std;

int main()
{
    IplImage* img;
    img = cvLoadImage( "hindi3.jpg" );

    vector<cv::Rect> objects;

    //***Resize image to 64x64 resolution***

    IplImage *resizeImage = cvCreateImage(cvSize(64,64),8,3);

    cvResize(img,resizeImage,CV_INTER_LINEAR);

    cvShowImage("Resize",resizeImage);
    cvWaitKey(0);

    //***Convert image to grayscale***

    IplImage *grayImage = cvCreateImage(cvGetSize(resizeImage),8,1);

    cvCvtColor(resizeImage,grayImage,CV_BGR2GRAY);

    cvShowImage("gray",grayImage);
    cvWaitKey(0);

    //***Getting the XML (Cascade xml generated thru haarTraining)***

    CvMemStorage* storage = cvCreateMemStorage(0);
    cout<<"Memory created\n";

    cv::CascadeClassifier cascade;
    cascade.load("cascade.xml");
    //CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( "cascade.xml" );
    cout<<"cascade.xml loaded successfully\n";
    double scale = 1.3;

    static CvScalar colors[] = { {{0,0,255}}, {{0,128,255}}, {{0,255,255}},
    {{0,255,0}}, {{255,128,0}}, {{255,255,0}}, {{255,0,0}}, {{255,0,255}} };

    //***Detect objects***

    cvClearMemStorage( storage );
    objects.clear();
    //CvSeq* objects = cvHaarDetectObjects( grayImage, cascade, storage, 1.1, 4, 0, cvSize( 40, 50 ));
    //cascade.detectMultiScale(grayImage, objects, 1.2, 4, CV_HAAR_DO_CANNY_PRUNING, cvSize(30, 30));
    cascade.detectMultiScale(grayImage, objects, 1.2, 4, CV_HAAR_SCALE_IMAGE, cvSize(30, 30));

    //***Draw a rectangle outside recognized pattern***

    cout<<"Object size : "<<objects.size();
    for( vector<cv::Rect>::const_iterator r = objects.begin(); r != objects.end(); r++)
    {            //rectangle(img, *r, Scalar(0,0,255), 2, 8, 0);
                 cvRectangle( grayImage, cvPoint( r->x, r->y ), cvPoint( r->x + r->width, r->y + r->height ),Scalar(0,0,255));
                 cout<<"In the loop\n";
    }

    cvNamedWindow( "Output" );
    cvShowImage( "Output", grayImage );
    cvWaitKey(0);

    cvReleaseImage(&resizeImage);
    cvReleaseImage(&grayImage);
    cvReleaseImage( &img );

    return 0;
}

Objekt-Größe gedruckt, zeigt mir 0 leider 🙁 Also es geht nicht in die for-Schleife.. Kann mir jemand helfen..

Vielen Dank im Voraus

PS : ich habe kommentiert einige Zeilen im code, die nicht sinnvoll waren. Bitte laß mich wissen, wenn ich die gleiche integrieren.

es bedeutet nur, dass Sie nicht erkannt keine Objekte! Sie schlug in Ihrem code, müssen Sie möglicherweise geschult, Ihre eigenen haar-Detektor. dies könnte das Problem sein. oder vielleicht ist dein Bild einfach nicht die keine Objekte enthalten, zu erkennen. zum Debuggen würde ich empfehlen Ihnen dringend, verwenden Sie die Gesichtserkennung, Bild -, der kommt mit dem Opencv samples und verwenden Sie einen pre-geschult haar-Gesicht-Detektor. wenn Sie, dass die Arbeit würde ich tauschen-Detektor. wenn es nicht funktioniert, dann gibt es ein problem mit dem Detektor nicht Ihren code

InformationsquelleAutor Frankenstein | 2013-04-29

Schreibe einen Kommentar