호리키타 마키와 하시모토 칸나를 더하여 2로 나누어 보았다 with python

【환경】



windows8.1
python2.7
opencv3

【폴더 구성】



 horikita_hasimoto
     |---joyu(넷에서 가져온 이미지 폴더)
    |  |---hasimoto.jpg
     |  |---horikita.jpg
     |---joyu_face(프로그램에서 추출하는 얼굴 이미지 폴더)
     |---haarcascade_frontalface_alt.xml(캐스케이드 파일)
     |---tashite_nidewaru.py(단 2로 나눈 프로그램)
     |---kao_toridasi.py(얼굴을 빼내는 프로그램)

【준비】



인터넷에서 호리키타 마키와 하시모토 칸나의 이미지를 가져옵니다.
나는 다음 이미지를 사용했다.


【프로그램 실행 방법】



kao_toridasi.py
# -*- coding: utf-8 -*-

import cv2
import os
import glob

# プログラムのあるフォルダパスの代入
current_dir = os.getcwd()

# joyuフォルダから全ての画像をリスト化
joyu_list = glob.glob(current_dir + "\\joyu\\*") 

# カスケードファイル
cascade_path = "haarcascade_frontalface_alt.xml"

for joyu in joyu_list:

    #ファイル読み込み
    image = cv2.imread(joyu)

    if(image is None):
        pass
        continue

    #グレースケール変換
    image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    #カスケード分類器の特徴量を取得する
    cascade = cv2.CascadeClassifier(cascade_path)

    #顔認識の実行
    facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))

    for rect in facerect:
        #顔だけ切り出して保存
        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

위 프로그램을 실행하면 joyu_face에 얼굴 이미지가 저장되므로,
이미지 이름을 horikita.jpg, hasimoto.jpg로 변경하십시오.

tashite_nidewaru.py
# -*- coding: utf-8 -*-

import cv2
import os

current_dir = os.getcwd()

image_path = current_dir + "\\joyu_face\\"
# ファイル読み込み
horikita = cv2.imread(image_path + "\\horikita.jpg")
hasimoto = cv2.imread(image_path + "\\hasimoto.jpg")

# グレースケール変換
horikita_gray = cv2.cvtColor(horikita, cv2.COLOR_BGR2GRAY)
hasimoto_gray = cv2.cvtColor(hasimoto, cv2.COLOR_BGR2GRAY)

# デフォルトの状態ではかなり気色悪い画像になってしまったため、
# 色を4種類にしてみました
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

# 画像保存
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)

【결과】





더하여 2로 나눈 이미지


【감상】



제일 먼저 칼라로 시험했습니다만, 기색이 나쁜 것이 되었습니다.
하지만 흑백에서도 미인이라고는 생각되지 않네요···(; 1_1)
개선점은 많이 있을 것 같습니다.

좋은 웹페이지 즐겨찾기