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]