前提・実現したいこと
初心者です.
一枚目の画像と二枚目の画像の変位量に応じてピクセルごとにグレースケールで塗りつぶすプログラムを作っています.
色の指定まではできたのですが,それを実際に画像に起こすところで詰まっています.どのようなプログラムを組めばできるでしょうか.
発生している問題・エラーメッセージ
TypeError: '<' not supported between instances of 'type' and 'float'
該当のソースコード
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=33#縦分割数 17b=33#横分割数 18 19#追加領域の幅 20k=20#縦追加領域 21v=20#横追加領域 22 23#座標指定(画像)と参照箱の指定 24ref_box=np.empty((int(h/a),int(w/b),3)) 25imref=cv2.imread('DSC_0087.JPG') 26for refY in range (int(h/(2*a)),int(h-(h/(2*a))),int(h/a)): 27 for refX in range (int(w/(2*b)),int(w-(w/(2*b))),int(w/b)): 28 z=(refX,refY) 29 ref_box=imref[int(refY-(h/(2*a))):int(refY+(h/(2*a))),int(refX-(w/(2*b))):int(refX+(w/(2*b)))] 30 31#座標指定(測定画像)と測定箱の指定 32mea_box=np.empty((int(h/a+2*k),int(w/b+2*v),3)) 33immea=cv2.imread("DSC_0088.JPG") 34for meaY in range (int(h/(2*a)),int(h-(h/(2*a))),int(h/a)): 35 for meaX in range (int(w/(2*b)),int(w-(w/(2*b))),int(w/b)): 36 z=(meaX,meaY) 37 mea_box=immea[int(meaY-(h/(2*a))-v):int(meaY+(h/(2*a))+v), int(meaX-(w/(2*b))-k):int(meaX+(w/(2*b))+k)] 38 39 40 41#テンプレートマッチングにより相互相関係数を計算 42sokan=cv2.matchTemplate(mea_box,ref_box,cv2.TM_CCOEFF_NORMED) 43 44#[-1,1]を[0,1]へ 45cv2.normalize(sokan,sokan,0,1,cv2.NORM_MINMAX) 46 47#相互相関係数の最小値・最大値とその座標を抽出 48#相関係数の最大値座標の検出 49pMax=cv2.minMaxLoc(sokan) 50 51#検出領域中心座標(mea_boxの左上が(0,0)となる)-----⓵ 52detect=(pMax[0]+meaX,pMax[1]+meaY) 53afterx=pMax[0]+meaX 54aftery=pMax[1]+meaY 55 56#変位量 57dx=afterx-refX 58dy=aftery-refY 59 60#変位量最大値 61dx_list=[dx] 62dy_list=[dy] 63dx_max=max(dx_list) 64dx_min=min(dx_list) 65dy_max=max(dy_list) 66dy_min=min(dy_list) 67 68#変位量を-1~1に変換 69if abs(dx_max)>=abs(dx_min): 70 j=abs(dx_max) 71else: 72 j=abs(dx_min) 73if abs(dy_max)>=abs(dy_min): 74 i=abs(dy_max) 75else: 76 i=abs(dy_min) 77if j==0: 78 j=0.01 79if i==0: 80 i=0.01 81for by in range(int(refY)): 82 for bx in range(int(refX)): 83 dxx=dx/j #dxxは変位量(x方向) 84 dyy=dy/i 85 86#色指定(Cは色の明るさ255/2が中央の色(変位量0) 87 Cx=(255.0/2.0)*dxx+(255.0/2.0) 88 Cy=(255.0/2.0)*dyy+(255.0/2.0)
試したこと
以下のようなコードを組んで回してみましたがエラーが出てしまいました.
for ay in range(int(refY)):
for ax in range(int(refX)):
ix=int
int(ax-w/(2b))<=int(ix<ax+w/(2b))
iy=int
ay-h/(2a)<=iy<ay+h/(2a)
ch1x=Cx
ch2x=Cx
ch3x=Cx
xg_img[iy,ix,0]=ch1x
xg_img[iy,ix,1]=ch2x
xg_img[iy,ix,2]=ch3x
ch1y=Cy ch2y=Cy ch3y=Cy yg_img[iy,ix,0]=ch1y yg_img[iy,ix,1]=ch2y yg_img[iy,ix,2]=ch3y
cv2.imwrite("img/x_so.JPG",xg_img)
cv2.imwrite("img/y_so.JPG",yg_img)
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー