作者sxskr1001 (kerker~)
看板EzHotKey
標題[AHK-] PixelSearch,PixelGetColor耗費時間一問
時間Tue Oct 13 00:28:58 2015
一、情境敘述:
如果將一張 " 只有黑白兩色的圖片 " 切割成長寬 500*500 等份,
也就是 250,000 個小方格,
已知這 250,000 方格的中心點座標,要判別這些方格內中心點的顏色是否是 Color T,
並產出 500*500 的 1,0 矩陣於 excel 中,
二、已知方法:
方法一:請問是用迴圈一個一個點用 pixelgetcolor or pixelsearch 搜
方法二:一次搜一列,假設黑中心點是 1,白中心點是 0,
擷取一列中心點顏色為範例如下
1 1 1 0 0 1 0 1 1
假設起 始點座標 與 終點座標 分別為 (X0,Y1) -> (X999,Y1)
由左到右用 PixelSearch 搜一條線從起點搜到終點,
假設搜到1,紀錄座標 (X1,Y1) 後,
由 (X1,Y1) ~ (X999,Y1) 搜0(改搜白色),假設搜到0,紀錄座標 (X2,Y1),
則我可以知道 X1 ~ X2 的方格都是1(黑色),然後記錄在矩陣內,
三、嘗試成果:
已經完成方法一,一分鐘約可完成搜尋兩千多格,因為太慢,所以想出法二,
目前法二還在構思怎麼寫,也不確定法二是否比較快,之所以來問而不是直接實測,
這是因為實際圖形不只兩個顏色,我是為了簡化問題所以才先來發問,
主要問是否法二比較快,因為如果要開發法二,會有很多其他的難題,還在考慮要
不要花時間去開發...
四、問題敘述:
1. 請問單純就搜尋顏色的速度來講,完成整個搜尋是方法一還是方法二較快?
2. 如果將圖型存在剪貼簿 clipboard 變數中,可以針對在剪貼簿的圖形搜某點的
顏色嗎?
3. 如果將圖型存成檔案,可以直接針對該檔案搜某座邊點的顏色嗎?
(因為現在是針對螢幕上的座標搜)
4. 有沒有其他方法可以加快算出這 500*500 的顏色數值矩陣?
(目前有想到的是使用 AHK_H 的多線程,不過似乎蠻難實現的,而且電腦太爛似乎
效果也不好,先排除這個選項吧)
最後,為答謝回覆此問題的好心人,會依照回答比例送出 p 幣 (1000 ~ 8000),
或是如果你有很好的想法,站內信討論報酬也是可以的喔:)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.110.220
※ 文章網址: https://webptt.com/m.aspx?n=bbs/EzHotKey/M.1444667341.A.ACC.html
※ 編輯: sxskr1001 (36.227.110.220), 10/13/2015 00:31:15
1F:→ edwin96017: 為什麼要搜黑搜白?不能跑一次只找白剩下不就是黑的? 10/13 21:47
你好~感謝你的提問~~因為要定位哪些座標的方格是什麼顏色,
所以一次搜一個點我覺得不夠快,所以邏輯改成一次搜一條線,
這條線就是方格中心點連成的線,線的起點與終點就是搜黑再搜白決定
※ 編輯: sxskr1001 (114.36.71.248), 10/14/2015 21:05:56
2F:→ logs: 不太明白你的問題,是因為500^2個點太多了嗎? 10/15 23:56
3F:→ logs: 但你的方法二,似乎暗示圖形有模式?否則怎能設計方法? 10/15 23:57
4F:→ logs: 不明白的是你方法二因循的邏輯或模式 10/15 23:58
5F:→ logs: 雖然 500^2 個點不是很大的數目,只是對直譯式語言會很吃力 10/15 23:59
6F:→ logs: 你可以試試呼叫用API,直接做影像處理,速度理論上快很多 10/15 23:59
7F:→ logs: 可以現成使用的有 gdip_All.ahk 裏頭有一個 GDIP_GetPixel() 10/16 00:01
的確是因為一個一個搜250000個點太慢所以要想了方法二;
方法二誠如大大所言是因循一個邏輯去設計,似乎是情境敘述的不夠精確導致難懂,
我的圖是由一個個方格組成,假設每個方格內顏色一致,
然後我知道所有方格可能的顏色,我的目標是獲得是否是某一顏色的矩陣,
我一有空會測試大大所說的GDIP_GetP,希望有機會可能和你討教^^
等等1500p附上,感謝你提供的資訊 :)
等如果事成有大幅改進再把後續禮金奉上~
※ 編輯: sxskr1001 (111.184.14.201), 10/16/2015 22:32:26
※ 編輯: sxskr1001 (111.184.14.201), 10/16/2015 22:35:01