2012-03-10 99 views
1

我有數百萬的圖像包含每一天的照片。我試圖找到一種方法來挑選某些顏色存在的部分,比如說紅色和橙色,不管形狀或物體。尺寸可能很重要 - 例如至少50x50像素。Python中的圖像點檢測

是否有一個高效的輕量級庫來實現這個功能?我知道有OpenCV,它看起來非常強大,但是對於這項任務來說它會太臃腫嗎?這是一個相對簡單的任務,對吧?

感謝

回答

1

我不知道是否有一個庫,但你可以使用部分簡單的閾值分割算法,這些領域。說,你想找到紅點。從圖像中提取紅色通道,選擇閾值,並消除低於閾值的像素。由此產生的像素是你的位置。要找到合適的閾值,您可以構建圖像的紅色通道直方圖並在那裏找到山谷。山谷中的最低點是您可以使用的閾值。如果有多個山谷,請平滑直方圖,直到有一個山谷和兩個山峯。您可以使用高斯函數來平滑柱狀圖。要從其餘像素中找到斑點,您可以使用標註算法,然後在標籤算法生成的圖形中查找連通的組件。是的,這很簡單。 :)

2

當然OpenCV可以做到這一點,但你也可以使用Python圖像庫PIL,只是創建一個函數來遍歷圖像裁剪小塊的圖像設置在你的最小尺寸,並測試這些塊的平均顏色並根據匹配標準進行寬容。沿(未經測試的僞代碼)線的東西:

import Image 

im = Image.open("test_picture.png") 
for y in xrange(image_height - block_height): 
    for x in xrange(image_width - block_width): 
     block = im.crop(x, y, x + block_width, y + block_height) 
     if colour_test(block): # test for match 
      return True 

它很容易得到使用block.getcolors()圖像的色彩頻率信息,讓您可以輕鬆編寫colour_test()功能。

+3

作爲OpenCV和PIL的替代品,有[Mahotas軟件包](http://luispedro.org/software/mahotas)。我是計算機視覺方面的實踐者,我個人很不喜歡PIL,scikits.image和OpenCV,雖然每個人都有某些特定的東西。 Mahotas完全基於scipy.ndimage數據類型,這在很多情況下都很方便。我發現的唯一問題是,在處理PNG圖像時,有時需要額外的庫[PyPNG](http://code.google.com/p/pypng/)。 – ely 2012-03-11 01:09:43

+0

@EMS:你爲什麼需要PyPNG?有沒有正確打開mahotas的PNG?我剛剛改變了mahotas處理PNG的方式(自從昨天發佈版本以來,它使用imread軟件包)。如果有圖像效果不佳,請通過示例給我發電子郵件。 Tx – luispedro 2012-03-15 14:45:12

+1

@EMS:我寫了mahotas,順便說一句 – luispedro 2012-03-15 14:46:48