前提・実現したいこと
テンプレートマッチングのプログラムを作成しています.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)
試したこと
調べましたがどのようなエラーかわかりませんでした.
> 調べましたがどのようなエラーかわかりませんでした.
これでは読み手にとっては情報量0です.
何をどう調べたのか? というのを明確にしてください.
あなたが何について調査を行い,何については行っていないのか? と言う話が書かれていない場合,
あなたと全く同じことを調べた結果が回答として書かれるかもしれず,まったくの無駄足になりかねません.
特に本件では,誰が読んでも着目点が同じになりそうなエラーメッセージ が出ているわけですし.