🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1959閲覧

テンプレートマッチングの精度を向上させたいです。

stylenanda

総合スコア10

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/25 07:03

編集2019/11/26 04:56

python opencvを用いてテンプレートマッチングを行っています

リンク内容

このサイトを参考にしているのですが、

python

1# 検索窓の範囲を描画する。 2fig, ax = plt.subplots(facecolor="w") 3ax.add_patch(plt.Rectangle((x, y), w, h, ec="r", fc="none")) 4ax.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 5 6plt.show() 7 8print("similarity:", result[x, y]) # similarity: -0.0350026

この部分は、テンプレートマッチングのサブセットと考えて良いのでしょうか??
実際に作成するときは、変形後のサブセットは最初に正方形を定義したとしても正方形を維持するとは限らないので、サブセットは入力画像により変形するものにしたいのですが、plt.Rectangle の意味と、どのようにプログラムを書いたらよいかどなたか教えてください

リンク内容

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この部分は、テンプレートマッチングのサブセットと考えて良いのでしょうか??

cv2.matchTemplate() の返り値 result は、検索窓を動かしていったときの各位置でのテンプレート画像とその領域の類似度が入っています。
質問のコードは result[x, y] が、検索窓が画像のどの位置にきたときの類似度の値なのかを画像に検索窓を描画することで可視化したコードであり、テンプレートマッチングの処理そのものとは関係ありません。

テンプレート画像は正方形でなくても、任意の長方形の大きさで構いません。

投稿2019/11/25 07:38

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stylenanda

2019/11/26 04:09

分かりづらい質問に対して、丁寧に答えていただきありがとうございます。 追加で質問なのですが、テンプレート画像からある部分をサブセットとして定義し、そのサブセットが入力画像でどの位置にあるかを探索するにはこのコードをどのように書き換えればよいでしょうか
tiitoi

2019/11/26 04:48

「テンプレート画像からある部分をサブセットとして定義し」というのはどういう意味でしょうか? テンプレート画像と最もマッチする画像の位置を取得したいということですか?
stylenanda

2019/11/26 04:58

質問にリンクを追加しました。 この質問者様のようなテンプレートマッチングをpyrhonで行いたいのですが、変形前の画像からサブセットを定義し、そのサブセットが変形後の画像の中でどの位置になるかというのを探索したいです 「テンプレート画像からある部分をサブセットとして定義し」とはそういう事を言いたかったです。素人で申し訳ありません。 結論を申しますと、このリンクの質問者様と同じようなことをpythonで行いたいです。
tiitoi

2019/11/26 05:25 編集

リンク先を拝見しました。以下のようにすればよいと思います。 1. 変形前の画像のサブセット部分を切り抜いて、テンプレート画像とする。 2. cv2.matchTemplate(変形後の画像、テンプレート画像) でテンプレートマッチングを実行する。 3. 類似度が最も高い位置を cv2.minMaxLoc() で得る。 これでサブセットが変形後の画像の中でどの位置かというのがわかると思います。 2, 3 については質問の最初のリンク先に記載があります。 1. については対象となるサブセット部分を以下のようにして切り抜いてください。 https://www.pynote.info/entry/opencv-clip-image
stylenanda

2019/11/26 06:19

ROI抽出してテンプレート画像とするやり方を教えてくださりありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問