Python的性能,还是PIL的糟糕用法?

时间:2013-04-26 23:49:11

标签: python performance image-processing python-imaging-library

我正在使用Python实现基本的全局阈值处理。算法的一部分涉及根据强度将像素分组到两个容器中;

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性能问题?

1 个答案:

答案 0 :(得分:1)

如果您要使用大量数字信息,则应将图像数据读入numpy并在那里操作数组。这些例程将比你在纯python中编写的任何东西更快(也更简单)。

看到这个问题,让你开始阅读和写作从PIL到numpy:

PIL and numpy

例如,如果图像是灰度图像,则点阵列将只是0-255的数字。要达到“阈值”,您可以简单地执行以下操作:

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