windows8.1 python2.7 opencv3
horikita_hasimoto | --- joyu (dossier d'image tiré du net) | |---hasimoto.jpg | |---horikita.jpg | --- joyu_face (dossier d'image de visage extrait par le programme) | --- haarcascade_frontalface_alt.xml (fichier cascade) | --- tashite_nidewaru.py (un programme qui divise par 2) | --- kao_toridasi.py (programme pour extraire le visage)
Je vais prendre des images de Maki Horikita et Kanna Hashimoto sur le net. J'ai utilisé l'image suivante.
kao_toridasi.py
# -*- coding: utf-8 -*-
import cv2
import os
import glob
#Substitution du chemin du dossier où se trouve le programme
current_dir = os.getcwd()
#Liste toutes les images du dossier joyu
joyu_list = glob.glob(current_dir + "\\joyu\\*")
#Fichier en cascade
cascade_path = "haarcascade_frontalface_alt.xml"
for joyu in joyu_list:
#Lecture de fichier
image = cv2.imread(joyu)
if(image is None):
pass
continue
#Conversion de l'échelle de gris
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#Acquérir la quantité de caractéristiques du classificateur en cascade
cascade = cv2.CascadeClassifier(cascade_path)
#Effectuer la reconnaissance faciale
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
for rect in facerect:
#Découpez seulement le visage et enregistrez
x = rect[0]
y = rect[1]
width = rect[2]
height = rect[3]
dst = image[y:y+height, x:x+width]
resize_image = cv2.resize(dst,(256,256))
new_image_path = current_dir + '\\joyu_face\\' + str(i) + '.jpg'
cv2.imwrite(new_image_path, resize_image)
i += 1
Lorsque vous exécutez le programme ci-dessus, l'image du visage sera enregistrée dans joyu_face. Veuillez changer le nom de l'image en horikita.jpg et hasimoto.jpg.
tashite_nidewaru.py
# -*- coding: utf-8 -*-
import cv2
import os
current_dir = os.getcwd()
image_path = current_dir + "\\joyu_face\\"
#Lecture de fichier
horikita = cv2.imread(image_path + "\\horikita.jpg ")
hasimoto = cv2.imread(image_path + "\\hasimoto.jpg ")
#Conversion de l'échelle de gris
horikita_gray = cv2.cvtColor(horikita, cv2.COLOR_BGR2GRAY)
hasimoto_gray = cv2.cvtColor(hasimoto, cv2.COLOR_BGR2GRAY)
#Dans l'état par défaut, l'image semble assez effrayante, donc
#J'ai essayé 4 types de couleurs
for i in xrange(len(horikita_gray)):
for j in xrange(len(horikita_gray[0])):
if horikita_gray[i][j] >= 192:
horikita_gray[i][j] = 192
elif horikita_gray[i][j] >= 128:
horikita_gray[i][j] = 128
elif horikita_gray[i][j] >= 64:
horikita_gray[i][j] = 64
else:
horikita_gray[i][j] = 0
for i in xrange(len(hasimoto_gray)):
for j in xrange(len(hasimoto_gray[0])):
if hasimoto_gray[i][j] >= 192:
hasimoto_gray[i][j] = 192
elif hasimoto_gray[i][j] >= 128:
hasimoto_gray[i][j] = 128
elif hasimoto_gray[i][j] >= 64:
hasimoto_gray[i][j] = 64
else:
hasimoto_gray[i][j] = 0
horikita_hasimoto = horikita_gray / 2 + hasimoto_gray / 2
for i in xrange(len(horikita_hasimoto)):
for j in xrange(len(horikita_hasimoto[0])):
if horikita_hasimoto[i][j] >= 192:
horikita_hasimoto[i][j] = 192
elif horikita_hasimoto[i][j] >= 128:
horikita_hasimoto[i][j] = 128
elif horikita_hasimoto[i][j] >= 64:
horikita_hasimoto[i][j] = 64
else:
horikita_hasimoto[i][j] = 0
#Enregistrer l'image
new_image_path = current_dir + '\\horikita_hasimoto.jpg'
cv2.imwrite(new_image_path, horikita_hasimoto)
new_image_path = current_dir + '\\horikita.jpg'
cv2.imwrite(new_image_path, horikita_gray)
new_image_path = current_dir + '\\hasimoto.jpg'
cv2.imwrite(new_image_path, hasimoto_gray)
Image d'ajout et de division par 2
Je l'ai d'abord essayé en couleur, mais cela s'est avéré effrayant. Cependant, je ne pense pas que ce soit beau même en noir et blanc ... (; 1_1) Il y aura probablement de nombreuses améliorations.
Recommended Posts