Estoy tratando de convertir imágenes en fotos perfectas de tamaño pasaporte. Utilizo haarcascade_frontalface_default.xml para detectar caras y luego recortarlas. En la actualidad, solo las caras se recortan, pero necesito fondo, cabeza y hombro como se muestra en la salida requerida. Tengo varias imágenes como esta. ¿Qué cambios debo hacer en mi código para obtener automáticamente una foto tamaño pasaporte perfectamente recortada?
import cv2
import sys
image = cv2.imread("D:/codes/python/document_scanner/Sample Photos/1 (27).jpeg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.3,
minNeighbors=3,
minSize=(30, 30)
)
print("[INFO] Found {0} Faces.".format(len(faces)))
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
roi_color = image[y:y + h, x:x + w]
print("[INFO] Object found. Saving locally.")
# cv2.imwrite(str(w) + str(h) + '_faces.jpg', roi_color)
cv2.imshow('image',roi_color)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("[INFO] Image faces_detected.jpg written to filesystem: ", status)
Salida requerida
Una forma de hacerlo es mediante el uso de contornos de imagen.
Básicamente, convierta su imagen a blanco y negro (usando imread(imgPath , 00)
), busque todos los contornos dentro de la imagen y elija el más grande por tamaño usando áreas de contorno. Este debería ser tu marco de fotos. Luego simplifique el contorno para recuperar un rectángulo perfecto. Luego, use el rectángulo para recortar su imagen original y debería estar listo para comenzar.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras