5
1. はじめに
顔を中心に切り取ったスクエア型の画像は、アイコン画像やプロフィール写真など、さまざまな用途で使われます。この記事では、PythonとOpenCVを用いて顔検出とトリミングを行う方法を紹介します。主な手法は以下の通りです。
2. 必要なライブラリ
このプログラムには以下のライブラリが必要です。
cv2
(OpenCV): 画像の読み込み、トリミング、保存に使用します。dlib
(顔検出ライブラリ): 顔検出器を初期化するために使用します。os
: ファイルパスの結合やフォルダ内のファイル取得に使用します。
3. 顔の検出とトリミングの手順
以下の手順で顔検出とトリミングを行います。
- 顔検出器の初期化:
dlib
ライブラリを使って顔検出器を初期化します。 - 画像の読み込み:
cv2
ライブラリを使って入力フォルダ内の画像を読み込みます。 - 顔の検出:顔検出器を使って画像内の顔の位置情報を特定します。
- 顔のトリミング:検出した顔の位置情報を元に、顔を中心にスクエア型にトリミングします。
- トリミングした画像の保存:トリミングした画像を
Pillow
ライブラリを使って保存します。
4. 顔検出器の初期化
face_detector = dlib.get_frontal_face_detector()
dlib
ライブラリのget_frontal_face_detector()
関数を使用して、顔検出器を初期化します。
5. 画像の読み込み
image = cv2.imread(file_path)
cv2
ライブラリのimread()
関数を使用して、入力フォルダ内の画像を読み込みます。
6. 顔の検出
face_locations = face_detector(image)
初期化した顔検出器を使って、画像内の顔の位置情報を特定します。face_locations
に顔の位置情報が格納されます。
7. 顔のトリミング
top, right, bottom, left = face_locations[0]
size = max(right - left, bottom - top)
x1 = max(0, left - (size - (right - left)) // 2)
y1 = max(0, top - (size - (bottom - top)) // 2)
x2 = x1 + size
y2 = y1 + size
face_image = image[y1:y2, x1:x2]
検出した顔の位置情報を元に、顔を中心にスクエア型の領域を計算します。トリミングされた画像はface_image
に格納されます。
8. トリミングした画像の保存
cropped_image = Image.fromarray(face_image)
output_path = os.path.join(output_folder, filename)
cropped_image.save(output_path)
Pillow
ライブラリのImage.fromarray()
を使って、トリミングされた画像をPillow形式に変換し、save()
メソッドで出力フォルダに保存します。
この記事では、PythonとOpenCVを使って顔を中心に切り取ったスクエア型の画像を生成する手法を紹介しました。顔検出器の初期化やトリミングの手順を詳しく解説しました。さまざまな用途で活用できる便利な画像処理技術ですので、ぜひお試しください。