我正在使用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性能问题?
答案 0 :(得分:1)
如果您要使用大量数字信息,则应将图像数据读入numpy
并在那里操作数组。这些例程将比你在纯python中编写的任何东西更快(也更简单)。
看到这个问题,让你开始阅读和写作从PIL到numpy:
例如,如果图像是灰度图像,则点阵列将只是0-255
的数字。要达到“阈值”,您可以简单地执行以下操作:
group1 = A[A> threshold]
group2 = A[A<=threshold]