2012-04-07 20 views
2

Ich arbeite an einem Gesichtserkennungsproblem, ich habe Arbeitscode, der Androids FaceDetector verwendet, um die Gesichter zu finden, aber ich muss herausfinden, wie OpenCV/JavaCV Funktionen zur Gesichtserkennung implementieren. Dies ist keine Live-Kamera, es verwendet ein Bild aus der Galerie, ich bin in der Lage, diesen Bilderpfad abrufen, aber ich kann nicht den CvHaarClassifierCascade-Klassifikator und CvMemStorage-Speicher zu initialisieren, wenn jemand mich in die richtige Richtung zeigen kann oder stellen Sie einen Quellcode bereit, der diese Variablen in Java korrekt initialisiert. DankeOpenCV/JavaCV Android Gesichtserkennung Initialisierung

Antwort

1

Sie könnten es so tun: Stellen Sie einfach ein BufferedImage.

Alternativ laden Sie das Original IplImage direkt mit dem Image-Pfad mit cvLoadImage (..).

// provide an BufferedImage 
BufferedImage image; 

// Preload the opencv_objdetect module to work around a known bug. 
Loader.load(opencv_objdetect.class); 

// Path to the cascade file provided by opencv 
String cascade = "../haarcascade_frontalface_alt2.xml" 

CvHaarClassifierCascade cvCascade = new CvHaarClassifierCascade(cvLoad(cascade)); 

// create storage for face detection 
CvMemStorage tempStorage = CvMemStorage.create(); 

// create IplImage from BufferedImage 
IplImage original = IplImage.createFrom(image); 

IplImage grayImage = null; 

if (original.nChannels() >= 3) { 
    // We need a grayscale image in order to do the recognition, so we 
    // create a new image of the same size as the original one. 
    grayImage = IplImage.create(image.getWidth(), image.getHeight(), 
       IPL_DEPTH_8U, 1); 
    // We convert the original image to grayscale. 
    cvCvtColor(original, grayImage, CV_BGR2GRAY); 
} else { 
    grayImage = original.clone(); 
} 

// We detect the faces with some default params 
CvSeq faces = cvHaarDetectObjects(grayImage, cvCascade, 
      tempStorage, 1.1, 3, 
      0; 

// Get face rectangles 
CvRect[] fArray = new CvRect[faces.total()]; 
for (int i = 0; i < faces.total(); i++) { 
      fArray[i] = new CvRect(cvGetSeqElem(faces, i)); 
     } 
// print them out 
for(CvRect f: fArray){ 
    System.out.println("x: " + f.x() + "y: " + f.y() + "width: " + f.width() + "height: " + f.height()); 
} 

tempStorage.release();