【Python】OpenCV で曖昧検索をしてみる

Python

OpenCV とは、画像・動画に関する機能を提供するライブラリです。

特定の画像内に、検索したい画像と似た部分を持つ箇所があるかを調べたい。

言葉で書くと難しいですが、見てもらえれば何となく伝わると思います。

OpenCV をインストール

Windows PowerShell でインストールできます。

pip install opencv-python

結果から

検索元となる画像

この画像内から日本国旗を探したいので、日本国旗のみの画像を検索したい画像として読み込ませます。

結果はこんな感じになります。

見つかった部分に赤枠が付きます。

処理

OpenCV のインポート

import cv2

画像の読み込み

# 検索元画像の読み込み
img = cv2.imread('dribbble.png')
H, W, C = img.shape
# 検索する画像の読み込み
template = cv2.imread('dribbble_jp.png')
h, w, c = template.shape

テンプレートマッチング

result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 最も類似度が高い位置を取得する。
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)

見つかった箇所に枠を付ける

def draw_window(img, x, y, w, h):
    tl = x, y  # 左上の頂点座標
    br = x + w, y + h  # 右下の頂点座標
    cv2.rectangle(img, tl, br, (255, 0, 255), 3)
drawn = img.copy()
draw_window(drawn, maxLoc[0], maxLoc[1], w, h)

画面に表示

cv2.imshow('image', drawn)
cv2.waitKey(0)
cv2.destroyAllWindows()

おわりに

とりあえず、やりたいことのやり方が分かったから、次から応用をやって行こうと思います。

今回の内容を GitHub に上げておきます。

noitaro/python-opencv
Contribute to noitaro/python-opencv development by creating an account on GitHub.

興味があればどうぞ。

参考

OpenCV - テンプレートマッチングの仕組み及び方法 - Pynote
テンプレートマッチングの仕組み及び方法について紹介する。
Python OpenCVで画像を検索、判定結果を返してみた - Qiita
背景 画像の一部に、検索したい画像が含まれているかどうかを 判定したい思いにかられたのでやってみました。 元画像の一致した部分を四角で囲んで表示/保存する先例はあったのですが、 判定結果を数値で返す例があまりなかったので、投稿。...
タイトルとURLをコピーしました