アニメ画像の顔検出+顔抽出
アニメ画像の顔検出と顔抽出をしていきます。
用意するもの
下のサイトを参考にしてください。
OpenCVによるアニメ顔検出ならlbpcascade_animeface.xml - デー...
今回使用するカスケードは、このサイトで紹介されているものです。
GitHub - nagadomi/lbpcascade_animeface: A Face detector for anime/manga using OpenCV
...
プログラム
以前、公開した人の顔検出と同じです。
Python+OpenCV|顔検出と顔画像を抽出する方法
...
カスケードをアニメ画像用に変えただけです。
#検出・抽出したい画像をimread内に記述
origin_img = cv2.imread(“画像ファイル”)
import urllib.request as req import cv2 import matplotlib.pyplot as plt #検出・抽出したい画像をimread内に記述 origin_img = cv2.imread("train/Jeanne/IMG_0419.JPG") img = origin_img.copy() plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() # カスケードファイルを指定して、検出器を作成 cascade_file = "lbpcascade_animeface.xml" cascade = cv2.CascadeClassifier(cascade_file) img_face = img # 画像の読み込んでグレースケール img_gray = cv2.cvtColor(img_face, cv2.COLOR_RGB2GRAY) # 顔認識 face_list = cascade.detectMultiScale(img_gray, minSize=(150, 150)) # 結果 if len(face_list) == 0: print("失敗") quit() for (x, y, w, h) in face_list: print("顔の座標 = ", x, y, w, h) red = (0, 0, 255) cv2.rectangle(img_face, (x, y), (x + w, y + h), red, thickness=20) # 出力 plt.imshow(cv2.cvtColor(img_face, cv2.COLOR_BGR2RGB)) plt.show() cv2.imwrite("out.jpg", img) #切り取り img_face_ex = origin_img[y:y+h, x:x+w] plt.imshow(cv2.cvtColor(img_face_ex, cv2.COLOR_BGR2RGB)) plt.show() #保存 cv2.imwrite("out_face.jpg", img_face_ex)
実行結果
実行結果では、入力画像と出力画像を示す。