這個問題有點語言不可知,但我選擇的工具恰好是一個numpy數組。查找圖像中的空白區域
什麼我做的是通過PIL拍攝兩幅圖像的差異:
img = ImageChops.difference(img1, img2)
而且我想找到包含從一個畫面到另一個變化的矩形區域。當然,內置的.getbbox()
方法,但如果有兩個區域進行更改,它將從一個區域返回到另一個區域,如果每個角落只有1個像素更改,它將返回整個圖像。
例如考慮以下地方o
是一個非零像素:
______________________
|o ooo |
| oooo ooo |
| o |
| o o |
| |
| oo o |
| o o ooo |
| oo ooooo |
| ooo |
| o |
|____________________|
我想獲得包含每個非零區域的邊框4×4元組。對於
oooo
o
o o
結構的邊緣的情況下,我並不十分擔心,這讓您處理 - 要麼獲得兩部分單獨或一起,因爲倒L形的邊界將完全重疊單一的邊界像素。
所以我希望得到一些輸入之前,我真的寫東西我從來沒有做過任何這種先進與圖像處理(如果有在我已經使用的內存模塊預先存在的方法,我歡迎他們!) 。
我的僞代碼十歲上下的版本是這樣的:
for line in image:
started = False
for pixel in line:
if pixel and not started:
started = True
save start coords
elif started and not pixel:
started = False
save end coords (x - 1 of course)
這應該給我的座標表,但後來我不得不確定的區域是連續的。我可以用圖形類型的搜索來做到這一點? (我們在上個學期的算法中做了大量的DFS和BFS)當然,我想我可以做到這一點,而不是結合我以前的循環?
我不會在「大」上的圖像會做這一點 - 他們是從一個攝像頭拉到和最好的一個我現在有做640×480。至多我會做720p或1080p,但這對未來來說已經足夠了,所以這不是一個真正的問題。
所以我的問題(S):我在正確的道路上領導,還是我的方法了嗎?更重要的是,是否有內置的功能阻止我重新發明車輪?最後,有沒有什麼好的資源可以幫助我們看看(教程,論文等)?
謝謝!
神聖煙霧,這是完美的!這正是我想要的 - 我想我實際上更喜歡它以這種方式處理邊緣情況 - 這樣它會真正獲得所有像素的框。我希望我能不止一次地投票! – 2010-07-22 20:49:02
@Wayne - 很高興幫助!一旦你學會了如何將不同的操作符串在一起,scipy.ndimage中有相當不錯的一批函數。祝你好運! – 2010-07-22 21:03:19
@JoeKington是最有幫助的程序員之一 – chimpsarehungry 2013-03-02 22:03:00