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

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

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

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

Python

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

Q&A

1回答

1465閲覧

テンプレートマッチングの不明なエラー

CHO-883

総合スコア2

OpenCV

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

Python

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

0グッド

0クリップ

投稿2021/06/30 09:21

前提・実現したいこと

テンプレートマッチングのプログラムを作成しています.sokanから始まるテンプレートマッチングを行っている文の所で以下のようなエラーが出ています.調べても分からなかったのでこちらで質問させていただきました.わかる方いればご回答お願い致します.

発生している問題・エラーメッセージ

sokan=cv2.matchTemplate(mea_box,ref_box,cv2.TM_CCOEFF_NORMED) error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-k8sx3e60\opencv\modules\imgproc\src\templmatch.cpp:588: error: (-215:Assertion failed) corr.rows <= img.rows + templ.rows - 1 && corr.cols <= img.cols + templ.cols - 1 in function 'cv::crossCorr'

該当のソースコード

python

1import sys 2import cv2 3import numpy as np 4 5#参照画像大きさ 6h=3072 7w=4608 8c=3 9 10#X方向変位量の測定画像の箱 11xg_img=np.empty((h,w,3)) 12#Y方向変位量の測定画像の箱 13yg_img=np.empty((h,w,3)) 14 15#参照画像の縦分割数 16a=512#縦分割数 17b=512#横分割数 18 19#追加領域の幅 20k=5#縦追加領域 21v=5#横追加領域 22 23#座標指定(画像)と参照箱の指定 24#参照画像箱の大きさ 25ref_box=np.empty((int(h/a),int(w/b),3)) 26#測定画像箱の大きさ 27mea_box=np.empty((int(h/a+2*k),int(w/b+2*v),3)) 28dx_box=np.empty((int(h),int(w))) 29dy_box=np.empty((int(h),int(w))) 30imref=cv2.imread('DSC_0091.JPG') 31immea=cv2.imread('DSC_0092.JPG') 32 33 34cy=0 35for refY in range (0,int(h),1): 36 cx=0 37 for refX in range (0,int(w),1): 38# z=(refX,refY) 39 ref_box=imref[int(refY-(h/(2*a))):int(refY+(h/(2*a))),int(refX-(w/(2*b))):int(refX+(w/(2*b)))] 40 41 y_min = int(refY-(h/(2*a))-v) 42 y_max = int(refY+(h/(2*a))+v) 43 x_min = int(refX-(w/(2*b))-k) 44 x_max = int(refX+(w/(2*b))+k) 45 if y_min < 0: 46 y_min = 0 47 if y_max > h: 48 y_max = h 49 if x_min < 0: 50 x_min = 0 51 if x_max > w: 52 x_max = w 53 mea_box=immea[y_min:y_max, x_min:x_max] 54 sokan=cv2.matchTemplate(mea_box,ref_box,cv2.TM_CCOEFF_NORMED) 55 #[-1,1]を[0,1]へ 56 cv2.normalize(sokan,sokan,0,1,cv2.NORM_MINMAX) 57 58 #相互相関係数の最小値・最大値とその座標を抽出 59 #相関係数の最大値座標の検出 60 minVal, maxVal, minLoc, maxLoc=cv2.minMaxLoc(sokan) 61 62 #検出領域中心座標(mea_boxの左上が(0,0)となる)-----⓵ 63# detect=(pMax[0]+refX,pMax[1]+refY) 64 afterx=maxLoc[0]+refX 65 aftery=maxLoc[1]+refY 66 67 #変位量 68 dx=afterx-refX 69 dy=aftery-refY 70 71 dx_box[cy,cx]=dx 72 dy_box[cy,cx]=dy 73 cx=cx+1 74 cy=cy+1 75 76 77cv2.imwrite('dx.jpg',dx_box) 78cv2.imwrite('dy.tif',dy_box)

試したこと

調べましたがどのようなエラーかわかりませんでした.

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

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

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

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

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

fana

2021/06/30 09:58

> 調べましたがどのようなエラーかわかりませんでした. これでは読み手にとっては情報量0です. 何をどう調べたのか? というのを明確にしてください. あなたが何について調査を行い,何については行っていないのか? と言う話が書かれていない場合, あなたと全く同じことを調べた結果が回答として書かれるかもしれず,まったくの無駄足になりかねません. 特に本件では,誰が読んでも着目点が同じになりそうなエラーメッセージ が出ているわけですし.
guest

回答1

0

sokan=cv2.matchTemplate(mea_box,ref_box,cv2.TM_CCOEFF_NORMED)

mea_box と ref_box のサイズの大小関係に問題があるのではないでしょうか.

(処理の意味から常識的に考えれば)走査される画像のサイズ >= テンプレートのサイズ でないとならないでしょう.

image Image where the search is running. It must be 8-bit or 32-bit floating-point.
templ Searched template. It must be not greater than the source image and have the same data type.

ってリファレンスにも書いてありますね.この条件に違反していないかどうかを確認してみてください.

とりあえずエラーメッセージに rows とか cols とか出ているのですから,何はともあれ画像バッファのサイズ方面をチェックしてみる場面でしょう.

投稿2021/06/30 09:44

編集2021/06/30 09:47
fana

総合スコア11996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問