
Photo by
mirabo_land
OpenCVで物体検出する
OpenCVで用意した画像が、検索する画像に含まれるか判定するプログラムを試してみた。
所要時間
30分
前提
Python
OpenCVのインストール
pip install opencv-python
参考
今回は、OpenCVPython)でTemplate Matchingを使用して画像内の検索(物体検出)をしてみました。
コード
元サイトのコードから改造したことは、max_valが0.99以上であるときに検出させた。もちろん、動画のように検出枠が表示させ続けられるように出来てもよいとは思う。
import cv2
# 検索対象画像とテンプレート画像の読み込み
img = cv2.imread('mesoko.jpg')
template = cv2.imread('logo.jpg')
# テンプレート画像の幅と高さを取得
w, h, _ = template.shape
# 画像の検索(Template Matching)
result = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
# 検索結果の信頼度と位置座標の取得
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
if(max_val > 0.99):
# 検索結果の左上頂点の座標を取得
top_left = max_loc
# 検索結果の右下頂点の座標を取得
bottom_right = (top_left[0] + w, top_left[1] + h)
# 検索対象画像内に、検索結果を長方形で描画
cv2.rectangle(img, top_left, bottom_right, (255, 255, 0), 2)
# 画像を表示
cv2.imshow('img', img)
cv2.waitKey(1)
実行結果

課題
次回以降、OpenCVを使って他の画像でも物体検出をできるか検証していく。実践的に使用できるものであれば、目的によってプロジェクトに活用できるだろう。
余談
クラスメソッド株式会社のコンテンツで、『二次元社員』広報担当として通称?めそ子ってキャラクターがいたんだが、いつのまにか更新が止まっていた。なお、ホームページを見ていたら "DevelopersIO"だけではなく"Zenn"も運営していたことに驚いた。
貴重なIT系、二次元キャラクターがどんどん減っていく、せめて、LINEスタンプを購入して感謝を示めす。
おわり!