技術的な背景とソースコード
この解析は、以下のPythonコードとINIファイルを用いて実現しました。
Pythonコード
import cv2
import configparser
import os
# INIファイルの読み込み
config = configparser.ConfigParser()
config.read('config.ini')
# INIファイルからパスを取得
base_path = config['Paths']['BasePath']
part_image_file = config['Paths']['PartImage']
full_image_file = config['Paths']['FullImage']
output_matched_file = config['Output']['MatchedImage']
output_cropped_file = config['Output']['CroppedImage']
# ファイルのフルパスを作成
part_image_path = os.path.join(base_path, part_image_file)
full_image_path = os.path.join(base_path, full_image_file)
# 画像の読み込み
part_image = cv2.imread(part_image_path)
full_image = cv2.imread(full_image_path)
if part_image is None or full_image is None:
raise FileNotFoundError("指定された画像ファイルが見つかりません")
# テンプレートマッチングの実行
result = cv2.matchTemplate(full_image, part_image, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# マッチング結果の位置を取得
top_left = max_loc
h, w, _ = part_image.shape
bottom_right = (top_left[0] + w, top_left[1] + h)
# マッチング部分を矩形で描画
matched_image = full_image.copy()
cv2.rectangle(matched_image, top_left, bottom_right, (0, 255, 0), 3)
# 結果を保存
matched_image_path = os.path.join(base_path, output_matched_file)
cv2.imwrite(matched_image_path, matched_image)
# マッチ部分を切り出して保存
cropped_area = full_image[top_left[1]:bottom_right[1], top_left[0]:bottom_right[0]]
cropped_image_path = os.path.join(base_path, output_cropped_file)
cv2.imwrite(cropped_image_path, cropped_area)
print(f"Matched image saved at: {matched_image_path}")
print(f"Cropped image saved at: {cropped_image_path}")
INIファイル
[Paths]
BasePath = C:\path\to\your\images
PartImage = part_image.png
FullImage = full_image.png
[Output]
MatchedImage = matched_image_result.png
CroppedImage = cropped_area_result.png
解説
このPythonコードは、INIファイルを通じて柔軟にファイルパスや出力設定を変更できるように設計されています。テンプレートマッチングの手法を使用し、部分画像が全体画像内のどこに位置しているかを高精度で特定します。
#OpenCV #AI #画像解析 #テンプレートマッチング #Python #場所特定 #画像処理 #AI技術 #コンピュータビジョン 東京都練馬区大泉町2丁目 #強盗