Download document (10.35 MB) - Escuela Superior de Informática ...
Download document (10.35 MB) - Escuela Superior de Informática ...
Download document (10.35 MB) - Escuela Superior de Informática ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
4.3. Segmentación <strong>de</strong> imágenes y captura <strong>de</strong> movimiento 2D 89Algoritmo 1 Captura <strong>de</strong> ví<strong>de</strong>o1: CvCapture *capture = NULL;2: IplImage *frame, frame copy = NULL;3: storage = cvCreateMemStorage(0);4: capture = cvCaptureFromAVI(inputFile);5: si (capture) entonces6: initializeFaceCapture();7: mientras (cvGrabFrame(capture)) hacer8: frame = cvRetrieveFrame(capture);9: frame copy = cvCreateImage(cvSize(frame.width, frame.height), IPL DEPTH 8U,frame.channels);10: <strong>de</strong>tect face eyes mouth(frame copy);11: find and draw contours(frame copy);12: fin mientras13: cvReleaseImage(frame copy);14: cvReleaseCapture(capture);15: fin siLa búsqueda <strong>de</strong> rostros, ojos y boca se realiza mediante un clasificador Haar para cadauno <strong>de</strong> ellos. Los clasificadores son propios <strong>de</strong> OpenCV y ya han sido previamente entrenados.Tras las búsqueda <strong>de</strong> cada zona en cada imagen se <strong>de</strong>vuelve un array <strong>de</strong> punteros aestructuras don<strong>de</strong> se almacena la información <strong>de</strong> cada zona <strong>de</strong>tectada. Esto permite hacer recortes<strong>de</strong> imagen mediante selección <strong>de</strong> Regiones <strong>de</strong> Interés (ROI), en el caso <strong>de</strong>l rostro, opintar la zona <strong>de</strong>tectada en cada frame, en el caso <strong>de</strong> ojos y boca.El algoritmo <strong>de</strong> <strong>de</strong>tección <strong>de</strong> rostros (equivalente para el <strong>de</strong> ojos y boca) emplea unafunción proporcionada por las bibliotecas <strong>de</strong> OpenCv llamada cvHaarDetectObjects, la cualutiliza un clasificador almacenado en un fichero en formato xml para <strong>de</strong>tectar caras en unaimagen. En este caso se trata <strong>de</strong> caras frontales, dado que el clasificador esta entrenado conesa funcionalidad.Se hace uso <strong>de</strong> la función cvCvtColor (const CvArr* src, CvArr* dst, int co<strong>de</strong>) para transformarla imagen original a escala <strong>de</strong> grises y la función cvResize (CvArr* src, CvArr* dst, intinterpolation) para reducirla <strong>de</strong> tamaño e invocar al clasificador para <strong>de</strong>tectar la cara en estecaso, la cual será extraída como región <strong>de</strong> interés (ROI) para posteriormente <strong>de</strong>tectar la bocay los ojos en una imagen más pequeña y con sólo información <strong>de</strong>l rostro. Para la reducción