Pythonコピペプログラミング #003 OpenCV テンプレートマッチング

コピペ用 code は以下の通り。 既存のソースコードに入れる場合には変数名が重複しないように注意すること。
また、テンプレートマッチングはパターンマッチングとは全くの別物であることに注意。

# -*- coding: utf-8 -*-
"""
    author: serpent
    creation datetime: 2021-12-18 18:08:13.375911
    filename: studyopencv01.py
    function: Arduinoからセンサ値読み取りでcsvファイル
    explanation: 
        1   input_file_name に分析したい評価画像のフルパスを入れる
        2   temp_file_name に上記1の中から見つけ出したい画像のフルパスを入れる
        3   上記1の画像から上記2の画像を発見。該当する位置を赤線で囲う。
        4   name_save_folder_path_soc に上記3で生成した画像を保存する。
        5   name_save_file_result に4のフォルダに保存する際のファイル名を入れる。
"""

# ------------------------------------------------------------------- #
# --- 設定 ---------------------------------------------------------- #
# ------------------------------------------------------------------- #
import cv2
import datetime
# ---アプリ実行時間計測用--------------------------------------------- #
time_start = datetime.datetime.now()
print(f"start:{time_start}")
# ---機能上のメイン処理----------------------------------------------- #

# 評価画像のファイル名(フルパス)
input_file_name = r"C:\Users\serpent\Documents\PythonScripts\study\cap\PIL_capture_1.png"

# テンプレート画像のファイル名
# temp_file_name = r"C:\Users\serpent\Documents\PythonScripts\study\arknightslrisei_0.jpg"
temp_file_name = r"C:\Users\serpenrt\Documents\PythonScripts\study\arknightslrisei_1.png"

# 保存先フォルダパス
name_save_folder_path_soc = r"C:\Users\serpenrt\Documents\PythonScripts\study\cap\\"

# 保存時ファイル名
name_save_file_result = r"result_1.png"

# 入力画像とテンプレート画像をOpenCVでプログラミ上に読み込み
img01 = cv2.imread(input_file_name)
temp = cv2.imread(temp_file_name)

# グレースケール変換
gray = cv2.cvtColor(img01, cv2.COLOR_RGB2GRAY)
temp = cv2.cvtColor(temp,  cv2.COLOR_RGB2GRAY)

# テンプレート画像の高さ・幅
h, w = temp.shape

# テンプレートマッチング OpenCVで実装
match = cv2.matchTemplate(gray, temp, cv2.TM_SQDIFF_NORMED)
min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
pt = min_pt

# テンプレートマッチングの結果を出力
cv2.rectangle(img01, (pt[0], pt[1]), (pt[0] + w, pt[1] + h), (0, 0, 200), 3)
cv2.imwrite(name_save_folder_path_soc+name_save_file_result, img01)
# - - - - - - - - - - - - - - - - - - - - - - - - - -

# ------------------------------------------------------------------- #
time_end = datetime.datetime.now()
print(f"start:{time_start}")
print(f"running_time:{time_end - time_start}")
print('done!')

# end_of_file: this line is 66th

fig.01
fig01の評価画像からテンプレート画像(fig.02, fig.03)の位置をテンプレートマッチングで特定する。fig.04,05の画像内に追加された赤枠がマッチング結果である。
fig.02
fig.03
fig.04 fig.02による結果(NG)
fig.05 fig.03による結果(OK)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

トップに戻る