windows8.1 python2.7 opencv3
horikita_hasimoto | --- joyu (Bildordner aus dem Netz) | |---hasimoto.jpg | |---horikita.jpg | --- joyu_face (Gesichtsbildordner vom Programm extrahiert) | --- haarcascade_frontalface_alt.xml (Kaskadendatei) | --- tashite_nidewaru.py (ein Programm, das durch 2 geteilt wird) | --- kao_toridasi.py (Programm zum Extrahieren des Gesichts)
Ich werde Bilder von Maki Horikita und Kanna Hashimoto aus dem Netz machen. Ich habe das folgende Bild verwendet.
kao_toridasi.py
# -*- coding: utf-8 -*-
import cv2
import os
import glob
#Ersetzen des Ordnerpfads, in dem sich das Programm befindet
current_dir = os.getcwd()
#Listen Sie alle Bilder aus dem Joyu-Ordner auf
joyu_list = glob.glob(current_dir + "\\joyu\\*")
#Kaskadendatei
cascade_path = "haarcascade_frontalface_alt.xml"
for joyu in joyu_list:
#Datei lesen
image = cv2.imread(joyu)
if(image is None):
pass
continue
#Graustufenumwandlung
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
cascade = cv2.CascadeClassifier(cascade_path)
#Gesichtserkennung durchführen
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
for rect in facerect:
#Schneiden Sie nur das Gesicht aus und speichern Sie
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
Wenn Sie das obige Programm ausführen, wird das Gesichtsbild in joyu_face gespeichert. Bitte ändern Sie den Bildnamen in horikita.jpg und hasimoto.jpg.
tashite_nidewaru.py
# -*- coding: utf-8 -*-
import cv2
import os
current_dir = os.getcwd()
image_path = current_dir + "\\joyu_face\\"
#Datei lesen
horikita = cv2.imread(image_path + "\\horikita.jpg ")
hasimoto = cv2.imread(image_path + "\\hasimoto.jpg ")
#Graustufenumwandlung
horikita_gray = cv2.cvtColor(horikita, cv2.COLOR_BGR2GRAY)
hasimoto_gray = cv2.cvtColor(hasimoto, cv2.COLOR_BGR2GRAY)
#Im Standardzustand sieht das Bild also ziemlich gruselig aus
#Ich habe 4 Arten von Farben ausprobiert
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
#Bild speichern
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)
Bild des Addierens und Dividierens durch 2
Ich habe es zuerst in Farbe versucht, aber es stellte sich als gruselig heraus. Ich finde es jedoch nicht schön, auch nicht in Schwarz und Weiß ... (; 1_1) Es wird wahrscheinlich viele Verbesserungen geben.
Recommended Posts