More ... | 画像比較モジュール画像比較モジュール#module //比較除外色の情報をすべてクリア #deffunc imghclsdel dim IMGHCOLOR,1:return // 比較する対象から除外する色を指定 // imghclsadd R,G,B #deffunc imghclsadd int p1, int p2, int p3 if IMGHCOLOR=0{sdim IMGHCOLOR,64,0:IMGHCOLOR.(length(IMGHCOLOR)-1)=""+p1+","+p2+","+p3 }else{:IMGHCOLOR.(length(IMGHCOLOR))=""+p1+","+p2+","+p3:}:return /* imgh p1 比較元ウィンドウID p2 比較先ウィンドウID p3 類似率を算出するアルゴリズム。 0で色の違いの度合いも含めて算出 1で色が少しでも違った場合、完全に違う色として算出 0だと類似率が高くなりがち、1だと低め。基本的に1推奨 p4 正確度。総ピクセル/p4で比較するピクセルの数を決定する為、 値を高くすればするほど処理は早くなるが正確性は失われる。 比較する画像・目的によっても変わるが、総px/1000.0程度の値を指定しても正確性は問題ない。 隠し機能として、比較するかしないかをRGB個別に指定可能。 下にあるAは上からR,G,Bに割り当てられていて、0で比較なし、1で比較あり。 デフォだとRGB全て比較。 */ #defcfunc imgmc int 比較元,int 比較先,int モード,int sc2 sc=sc2 A.0=1 A.1=1 A.2=1 操作先ウィンドウID=ginfo(3) gsel 比較元 mref 比較元px,66 比較サイズx=ginfo_winx:比較サイズy=ginfo_winy sc=limit(sc,1,(比較サイズx*比較サイズy)/10.0) 総px=double(比較サイズx*比較サイズy)/sc gsel 比較先 mref 比較先px,66 if 比較サイズx!ginfo_winx or 比較サイズy!ginfo_winy:Dialog "比較元のウィンドウサイズと\n比較先のウィンドウサイズが異なります。",1,"ウィンドウサイズが異なります":return -1 dim 元,3,総px dim 先,3,総px dim 差,3 類似値=double(0.0) repeat 総px ct=cnt repeat 3 if A.cnt=1:{ 元.cnt.ct=peek (比較元px,(ct*sc)+(2-cnt)) 先.cnt.ct=peek (比較先px,(ct*sc)+(2-cnt)) if (元.cnt.ct-先.cnt.ct)>=0 & モード=0:{ 差.cnt+(元.cnt.ct-先.cnt.ct) }else{ 差.cnt+(先.cnt.ct-元.cnt.ct) } if (元.cnt.ct-先.cnt.ct)!0 & モード=1:{ 差.cnt+255 } } loop loop repeat 3 if A.cnt=1:類似値+(100.0-(double(差.cnt)/double(総px*2.55))) loop 類似値/double(A.0+A.1+A.2) gsel 操作先ウィンドウid return 類似値 #global Screen 0,500,500 dialog "",16,"画像" if stat=1:picload refstr,1:else:Color 255,0,0:boxf 10,10,490,490 Screen 1,ginfo_winx,ginfo_winy dialog "",16,"画像" if stat=1:picload refstr,1:else:Color 150,0,0:boxf 5,5,495,495 正確性=(ginfo_winx*ginfo_winy)/10.0 title ""+imgmc(0,1,0,正確性) |