2012-10-19 72 views
2

我有一個圖像(對不起,不能鏈接它用於版權目的),其中有一個字符在黑線概述。描繪角色的黑色線條是圖片上最黑暗的一條(計劃使用這個事實來幫助找到它)。我需要做的是獲得四個座標,在角色周圍繪製虛擬框。盒子應該儘可能小,同時仍然保留其內容中的輪廓字符。我打算使用盒子來幫助用盒子的中心點來確定角色身材的中心點。PIL - 用虛擬框標識對象

我開始試圖確定輪廓的一部分。由於它是圖像上最黑的一條線,我使用getextrema()獲得輪廓上至少一個點,但我無法弄清楚如何獲得更多點並將這些點合併爲一個框。

任何有關這個問題的深入瞭解,非常感謝。乾杯!

  • 編輯*

這是我現在有:

im = Image.open("pic.jpg") 
im = im.convert("L") 
lo, hi = im.getextrema() 
im = im.point(lambda p: p == lo) 
rect = im.getbbox() 
x = 0.5 * (rect[0] + rect[2]) 
y = 0.5 * (rect[1] + rect[3]) 

這似乎是這個數字裏面得到相當一致的,但它真的不是那麼靠近市中心。任何想法爲什麼?

回答

1
  1. 找到一個合適的閾值,將輪廓與圖像的其餘部分分開,也許使用已有的極值。如果對比度足夠大,這應該不會太難,只需將最小值增加一些。
  2. 將圖像與您找到的值進行閾值確定,請參閱this question。您希望黑暗部分在二進制閾值圖像中變爲白色,因此請使用小於閾值(lambda p: p < T)。
  3. 使用thresholdedImage.getbbox()獲得大綱
+0

謝謝你的邊界框。你會知道如何獲得盒子的中心點嗎? –

+0

這是一個矩形!中心位於0.5 *(左+右),0.5 *(頂部+底部)。 – Junuxx

+0

我用我現在的東西更新了我原來的帖子。介意看看? –