[トップ][一覧][最近の更新]

編集履歴:差分

2015/09/09 08:53:23 JST以来の画像比較モジュールの変更箇所

  • + 追加された行
  • - 削除された行

編集履歴ページに戻る

+ * 画像比較モジュール
- *画像比較モジュール
  
  {{{
+ #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,正確性)
  }}}