タイトルと内容が合っていなかったので内容を整理して再度質問します。
画像の中のロゴを検出し、その座標を取得したいです。
「ロゴは2種類ありまして、ロゴ1とロゴ2です。
1)ロゴ1が存在する/しない
2)ロゴ2が存在する/しない
3)両方とも存在する場合、ロゴ1とロゴ2の位置
が知りたいのです」
「テンプレマッチでは、ほぼ水平の画像であれば、上記1),2),3)は検出できていましたが、
傾いた画像だと検出できませんでした。
角度で言えば、プラマイ20度以内の傾きを想定しています。
それ以上の傾きは検出できなくても良いです。
R-CNNやCNNに拘っている訳ではないです。
私の内容は、R-CNNやCNNを使うべきなのでしょうか、他の手段があるのでしょうか?
ご存じの方ご教授願います。```ここに言語を入力
追記:
ここで言う傾きとは、時計回りにプラマイ20度回転するを意味します。
3次元的な回転ではないです。
私が書いたコードを添付します。
ターゲット画像の中からロゴ1とロゴ2を見つけます。
MAXVALが0.90以上あれば発見したとみなします。
ロゴ1とロゴ2の位置を比較します。
ロゴ1がロゴ2より右側にあればOKとします。
そうでなければNGです。
-記-
import cv2 import numpy as np from matplotlib import pyplot as plt # 読み取った画像の読み込み path = "C:/Users/matching/xxx.jpg" img = cv2.imread(path) img_terget = img plt.imshow(img) #一旦表示 plt.show() print(img.shape) # テンプレート画像の読み込み # LOGO1 temp_path = "C:/Users/template/logo1.jpg" img= cv2.imread(temp_path) logo1 = img plt.imshow(img) plt.show() print(img.shape) # LOGO2 temp_path = "C:/Users/template/logo2.jpg" img= cv2.imread(temp_path) logo2 = img plt.imshow(img) plt.show() print(img.shape) # テンプレートマッチング form = cv2.TM_CCOEFF_NORMED result1 = cv2.matchTemplate(img_terget, logo1, form) result2 = cv2.matchTemplate(img_terget, logo2, form) # 最も類似度が高い位置を取得する。 #LOGO1 minval, maxval, minloc, maxloc = cv2.minMaxLoc(result1) maxloc1 = maxloc #画像の座標で使うのでそれ用として確保 maxval1 = round(maxval, 2) #数が長いので小数点2桁までにする、 #LOGO2 minval, maxval, minloc, maxloc = cv2.minMaxLoc(result2) maxloc2 = maxloc #画像の座標で使うのでそれ用として確保 maxval2 = round(maxval, 2) #数が長いので小数点2桁までにする、 #判定 if maxval1 >= 0.90 and maxval2 >= 0.90 and macloc1 > macloc2 print("ok") else print("ng")
あなたの回答
tips
プレビュー