0

我正在用Python實現基本的全局閾值。算法的一部分涉及根據其強度將像素分組到兩個容器中;Python性能還是PIL的不良使用?

group_1 = [] 
group_2 = [] 
for intensity in list(image.getdata()): 
    if intensity > threshold: 
     group_1.append[] 
    else: 
     group_2.append[] 

對於超過0.5百萬像素的圖像,此方法通常使用約5秒或更長時間。在每種可能的方法中,我需要檢查每個像素,所以我想知道是否有更快的方法來執行此操作(使用PIL,其他數據結構或算法中的其他方法?),還是僅僅是Python性能問題?

+0

你爲什麼要從數據列表中?這是一個可迭代的,所以只是迭代它。 – 2013-04-26 23:51:26

+0

你是對的,我沒有把它作爲一個列表,但它沒有執行任何更快的數據迭代,而不是數據列表。 – Skogen 2013-04-26 23:55:19

+1

不要迭代每個像素。在PIL中可能有更好的方法,但是你可以對數據進行排序(C速度)並將其分割爲閾值。 – 2013-04-26 23:56:38

回答

1

如果您打算使用大量的數字信息,您應該將圖像數據讀入numpy並在那裏操作數組。這些例程比任何你可以用純Python寫的東西都快(更簡單)。

看到這個問題,讓你開始閱讀和PIL寫numpy的:

PIL and numpy

例如,如果圖像是灰度,點的陣列將簡單地從0-255一些。到「門檻」,你可以簡單地做這樣的事情:

group1 = A[A> threshold] 
group2 = A[A<=threshold]