AIで画像を判定して顔のある場所に赤い矩形表示をする、というのを見たことがあるのではないでしょうか。
ちょっとステップを踏んで、まずはAI判定はおいといて矩形表示はどうしてるんだろう?という方向けに、
Pythonで画像に矩形表示を追加する方法を調べてみました。
youtube流しながら自動で顔認識して矩形表示しているの、カッコいいですよね~。あれ、やりたいんだけど、まずは静止画に普通に付け足す方法から知りたい!という方向けです。
やること
・opencvをインストールする
・画像を読み込む
・画像に矩形表示を追加する
・画像を表示する
・画像をファイル出力する
それでは順番に見ていきましょう!
順番にみていく
opencvをインストールする
画像の読み込み、編集にopencvモジュールを使います。
まだインストールしていなければ、pipを使ってインストールします。
pip install opencv-python
執筆時点の関連ファイルは次のようです。上記コマンドでインストールできない方は、PyPIからファイルをダウンロードして個別インストールもできます。
・opencv_python-4.7.0.72-cp37-abi3-win_amd64.whl
・numpy-1.24.3-cp311-cp311-win_amd64.whl
画像を読み込む
サンプル画像はこちらを使いました。
opencvを利用して画像を読み込みます。(target.jpg)
import cv2
image = cv2.imread('target.jpg')
サンプル画像はこちらのサイトからお借りしました。フリーの画像素材を提供してくださっています。超優良サイトです。
画像に矩形表示を追加する
先ほど読み込んだ画像データ(image)に、矩形を追加します。
矩形の左上と右下の2点を指定しています。
import cv2
# 矩形を描画する
pt1 = (750, 200) # 左上隅の座標
pt2 = (1250, 650) # 右下隅の座標
color = (0, 0, 255) # B, G, R
thickness = 2 # 枠線の太さは2
cv2.rectangle(image, pt1, pt2, color, thickness)
ちなみに顔認識はしていません!概要で述べたとおりです。
座標値をぽちぽちといじって、顔部分に矩形が来るように調整したものです。
画像を表示する
画像データ(image)を表示します。
import cv2
# 画像を表示する
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
実行結果がこちらです。
画像データ(image)をウィンドウで画像表示しています。
ワンちゃんの顔部分に赤い矩形表示を追加されています。
画像をファイル出力する
表示するだけでなくて、画像ファイルとして出力したいんだ!というケースがありますよね。
jpg画像としてファイル出力したいと思います。
import cv2
# 画像ファイルに出力する
cv2.imwrite('./target-after.jpg', image)
画像データ(image)を「target-after.jpg」というファイル名で出力しています。
サンプルコード
これらを合体したものがこちらです。
import cv2
#image = cv2.imread('path/to/image.jpg')
image = cv2.imread('target.jpg')
# 矩形を描画する
pt1 = (750, 200) # 左上隅の座標
pt2 = (1250, 650) # 右下隅の座標
color = (0, 0, 255) # B, G, R
thickness = 2 # 枠線の太さは2
cv2.rectangle(image, pt1, pt2, color, thickness)
# 画像を表示する
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 画像ファイルに出力する
cv2.imwrite('./target-after.jpg', image)
opencvモジュールがほとんどの仕事をしてくれているので、とても簡潔ですね!
以上となります。
少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!