コピペ用 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
fig01の評価画像からテンプレート画像(fig.02, fig.03)の位置をテンプレートマッチングで特定する。fig.04,05の画像内に追加された赤枠がマッチング結果である。 |