先將問題簡單一點: 比如有一張圖1.png (先假設它是全屏), 我先從這張圖上取一塊圖2.png,想找到這張2.png在1.png上的螢屏x y坐標值。需要程式對兩張圖進行自動對比得到值,這方面有什么文章或開源庫可以實作嗎。謝謝大神指導


uj5u.com熱心網友回復:
還在想方法中。。。。uj5u.com熱心網友回復:
能不能改下功能嘛,通過點擊螢屏獲取當前點擊位置的x y坐標值,如果可以的話,在你的Activity或者Fragment里面重寫onTouchEvent方法,自定義監聽就可以了uj5u.com熱心網友回復:
這是影像識別?uj5u.com熱心網友回復:
OpenCV吧。。。uj5u.com熱心網友回復:
試試影像匹配演算法中的灰度匹配或者其他匹配演算法,可以使用opencv庫uj5u.com熱心網友回復:
是有是影像識別,不知你用過 Total Control腳本 同里面的這個功能很類似
q
uj5u.com熱心網友回復:
你將內容理解錯了,我是要進行圖片匹配。uj5u.com熱心網友回復:
有沒有具體點的影像識別方法啊uj5u.com熱心網友回復:
只能大體知道那塊區域,具體到某個像素點,這個不可能,因為臨近和非臨近的像素點也可能是相同的。uj5u.com熱心網友回復:
只要大概就行了70%知道就行了,因為手機我是有截圖的,所以其實橫坐標我是有的,現在只要是找到縱坐標匹配,現在我用最笨方法的是硬掃每行像素,不知道演算法怎么處理優化。uj5u.com熱心網友回復:
我個人有個想法僅僅供參考:樓主既然已經知道了x坐標了,而且2.png圖片的width和height應該也是已經知道的,那么在1.png的x坐標和x+width坐標畫2條豎線的話,這2條豎線區域里面一定包含2.png。然后你把2.png的所有像素點累加起來得到一個值,然后用一個回圈陳述句在剛才那個豎條區域按照每個像素+1為步長,計算和png2相同面積的像素和是否和剛才的值是否一致?我沒有專門搞過影像處理,不知道這個回圈可以做到嗎?如果可以做到的話,應該能找到幾個相同值的小方塊區域,然后你把2png的比如4分之1的區域像素和計算為一個值,用遞回在剛才找到的幾個小方塊里面匹配是否一致,這樣用排除法,再找到幾個,然后你8分之1原來2.png的像素和,這樣一直找到原來位置的那個小方塊圖片。這樣做不知道能不能行?uj5u.com熱心網友回復:
你這個方法同我的現在用的方法差不多,但這個方法問題,是有時圖的生成1.png象素會有一定差異,需要相似一種判斷才行,具體還沒找到。uj5u.com熱心網友回復:
是指2.png和1.png的像素有一些差異嗎?uj5u.com熱心網友回復:
大圖是手機生成的圖,小圖是對比圖,因為要在大圖內找小圖所在區域,有可能會有少量像素差異。uj5u.com熱心網友回復:
在整張圖中找一塊的位置確有點麻煩。。。uj5u.com熱心網友回復:
能分析的出是哪里有差異嗎?比如小圖周長一圈范圍是不是有些差異,其它區域沒有像素丟失呢?uj5u.com熱心網友回復:
沒有,我想可能是解析度的問題,現在問題在于如何快速找到圖的位置與里面匹配得到一個相似的結果值。肯定有演算法,我看tc提供這種功能一般找個圖電腦上2s能匹配,應有公開的演算法。還在找中。uj5u.com熱心網友回復:
圖片剪裁后默認可能使用JPEG的85質量保存,這個會不會是差異的來源?
uj5u.com熱心網友回復:
cv2.matchtemplate函式進行影像匹配,這里給出了六種方法的對比,最后看max_loc或者min_loc就行img=cv2.imread(filename,cv2.IMREAD_GRAYSCALE)
template=cv2.imread(filename,cv2.IMREAD_GRAYSCALE)
h,w=template.shape[:2]
cv_show("img",img )
method=["cv2.TM_SQDIFF","cv2.TM_CCORR","cv2.TM_CCOEFF","cv2.TM_SQDIFF_NORMED","cv2.TM_CCORR_NORMED","cv2.TM_CCOEFF_NORMED"]
for meth in method:
car=img.copy()
#car=img.copy()
method=eval(meth)
print(meth)
res=cv2.matchTemplate(img2,template,method)
min_var,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
if method in [cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED]:
top_left=min_loc
else:
top_left=max_loc
bottom_right=(top_left[0]+w,top_left[1]+h)
ret=cv2.rectangle(car,top_left,bottom_right,(255,0,0),2)
plt.imshow(ret)
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/37354.html
標籤:Android
上一篇:如何搭建ZooKeeper?(zookeeper入門教程)
下一篇:各位php微信開發大佬幫幫忙
