2017年3月2日木曜日

[Python3] OpenCV3 を使用して顔部分のみを書き出す

# pylint: disable-msg=C0103

"""
指定フォルダ内にある画像から顔部分のみを書き出す
"""
import os
import glob
import cv2

search_path = '/tmp'
result_path = search_path + '/' + 'result'

"""
haarcascade_frontalface_default.xml ファイルは anaconda のインストール
ディレクトリ配下にある
(anaconda)/pkgs/opencv3-3.1.0-py35_0/share/OpenCV/haarcascades/
"""
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

if not os.path.exists(result_path):
    os.mkdir(result_path)

files = glob.glob(search_path + '/*.jpg')

for f in files:
    img = cv2.imread(f)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 3)
    count = 1
    filename, ext = os.path.splitext(os.path.basename(f))
    # 顔認識で得られた部分を書き出す
    for (x, y, w, h) in faces:
        dst = result_path + '/' + filename + '_' + str(count) + ext
        cv2.imwrite(dst, cv2.resize(gray[y:y + h, x:x + w], (64, 64)))
        count += 1

0 件のコメント:

コメントを投稿