参考サイト
まずcascadeファイルを得る
opencv公式の一番上のRereasesに入って、一番上のOpenCV –〜.〜.〜みたいな奴のSoursesをクリックしてzipファイルをお好きなフォルダにダウンロードし(少し時間がかかります。)展開してください。
沢山ファイルが入っていますが使うのは、dataフォルダのhaarcascadesの中のhaarcascade_frontalface_default.xmlというファイルだけです。
そのファイルの場所は把握しておき、""cascade_file = ""のところで定義しましょう。
私は、
000001.jpg(試したい画像ファイル)とcvcut.py(以下のコード)とmodelsフォルダを同一の階層におき、modelsの中にhaarcascade_frontalface_default.xmlファイルを置く、という構造にしました。
顔の切り出し+顔部分を枠で囲むコード
cvcut.py
import cv2
cascade_file = "./models/haarcascade_frontalface_default.xml"
cascade = cv2.CascadeClassifier(cascade_file)
#画像ファイルの読み込み
image_picture = "画像ファイルの名前"
img = cv2.imread(image_picture)
#グレースケールに変換する
img_g = cv2.imread(image_picture,0)
#顔部分の検出
face = cascade.detectMultiScale(img_g)
#顔の座標を表示する
print(face)
#切り取る
for x,y,w,h in face:
face_cut = img[y:y+h, x:x+w]
#白枠で囲む
for x,y,w,h in face:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,255),2)
#画像の出力
cv2.imwrite('face_cut.jpg',face_cut) #切り取った写真(この場合はface_cut.jpgとして出力される)
cv2.imwrite('face_white.jpg', img)#顔部分が白枠で囲まれた写真(この場合はface_rectangle.jpgとして出力される)
cvcut.pyがある階層において、
python cvcut.py
を実行する。
すると新しくface_cut.jpgと、face_white.jpgができているのがわかるだろう。