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

編集履歴:差分

2015/09/09 08:54:14 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,正確性)
  }}}