Cuando se trata de detección de cara, primero debemos comprender el clasificador de características HAAR. Para decirlo sin rodeos, el clasificador de características HaAR es una serie de archivos XML, que describen los valores característicos de varias partes del cuerpo humano, como caras, ojos, etc. Los siguientes archivos de características se proporcionan en OpenCV3.2.0:
Haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalcatface.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_default.xml
Haarcascade_fullBody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml
Al cargar diferentes archivos de características, se puede lograr el efecto de detección correspondiente.
Descripción del parámetro de función DetectMultiscale en OpenCV3.2.0:
DetectMultiscale (Mat Image, MatoFrect Objects, Double ScaleFactor, Int Minneighbors, INT Flags, Tamaño Minsize, tamaño MaxSize)
Imagen: La imagen a detectar es generalmente escala de grises (mejora de la eficiencia)
Objetos: un grupo vectorial de caja rectangular de objetos detectados
SCALEFACOR: El coeficiente de escala de la ventana de búsqueda en dos escaneos consecutivos. El valor predeterminado es 1.1, es decir, cada ventana de búsqueda se expande en un 10% en secuencia.
Minneighbors: el número mínimo de rectángulos adyacentes que constituyen el objetivo de detección (el valor predeterminado es 3)
FLAGS: use el valor predeterminado o use cv_haar_do_canny_pruning. Si se establece en CV_HAAR_DO_CANNY_PRUNING, la función usará la detección de bordes astutos para excluir áreas con demasiados o muy pocos bordes, por lo que estas áreas no suelen ser el área donde se encuentra la cara
minsize: el rango mínimo del área objetivo obtenida
MaxSize: el rango máximo del área objetivo obtenida
Código de muestra de detección de cara:
importar org.opencv.core.core; import org.opencv.core.mat; import org.opencv.core.matofrect; import org.opencv.core.point; import oopencv.core.rect; import org.opencv.core.scalar; import org. System.out.println ("/nrunning faceDetector"); CascadeClassifier Facedetector = new CascadeClassifier (); Facedetector.load ("c: // archivos de programa // opencv // fuentes // datos // haarcascades // haarcascades // haarcascades_frontalface_alt.xml"); Mat Image = imgCodecs.imread ("f: //1114.jpg"); MatoFrect Facedetections = new MatoFrect (); Facedetector.detectMultiscale (Image, Facedetections); System.out.println (string.format ("detectado %s caras", facedetections.toarray (). Longitud)); for (rect rect: faceedetections.toarray ()) {imgproc.rectangle (imagen, nuevo punto (rect.x, rect.y), nuevo punto (rect.x + rect.width, rect.y + rect.height), nuevo escalar (0, 255, 0)); } Cadena filename = "f: //ouput.jpg"; Imgcodecs.imwrite (nombre de archivo, imagen); }} Diagrama de imagen y resultados de origen:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.