質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.37%
OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Python

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

Q&A

解決済

1回答

1135閲覧

opencv画像検索-python

sibainu

総合スコア30

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Python

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

0グッド

0クリップ

投稿2021/08/29 11:38

Aの画像からBの画像を複数個検索したい

Aの画像の中にBの画像が複数箇所あるので全ての位置を取得したいです。
画像A
画像A
画像B
イメージ説明
今の状態
画像を検索することはできたのですが、1つだけだったので、これを複数個検索できるようにしたいです。

python

1import cv2 2def Judge_Matching(num): 3 if 0.99 < num: 4 return True 5 else: 6 return False 7 8# 検索元/先画像を読み込み 9image = cv2.imread(r"画像A") #検索先画像のファイルパスを指定 10template = cv2.imread(r"画像B") #検索元画像ファイルパスを指定 11 12#OpenCVで画像部分一致を検索 13result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF) 14 15# 最も類似度が高い位置と低い位置を取得します 16minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result) 17 18#類似度が閾値を超えているか判定(上で作った関数を使用) 19Judg = Judge_Matching(maxVal) 20 21x,y=maxLoc 22print(x,y) 23print(maxVal) 24#結果を出力 25print(Judg)

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

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

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

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

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

guest

回答1

0

ベストアンサー

複数物体のテンプレートマッチング
を少し修正してみました。

python

1import cv2 2import numpy as np 3 4img_rgb = cv2.imread('all.png') 5img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) 6template = cv2.imread('ptn.png',0) 7w, h = template.shape[::-1] 8 9res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) 10threshold = 0.88 11loc = np.where( res >= threshold) 12for pt in zip(*loc[::-1]): 13 _ = cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) 14 15cv2.imwrite('res.png',img_rgb)

実行結果

イメージ説明

投稿2021/08/29 12:37

ppaul

総合スコア24668

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

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

sibainu

2021/08/29 14:56

座標の取得の仕方も欲しいです。 欲張ってすみません。
ppaul

2021/08/29 15:07

回答のコードのlocに入っています。 ただし、一つ目の図は少しずらしてもマッチするようでほぼ同じのが3つか4つ入っていました。 ほぼ同じ座標のものを一つにするのはそれほど難しくないので自力でやっtみてください。
sibainu

2021/08/29 22:41

了解です。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問