使用Python和PIL进行慢速图像处理

时间:2012-04-30 14:10:29

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

我正在尝试按RGB值的顺序对图像的像素进行排序。作为Python的新手我试过这个:

from PIL import Image

source = Image.open("source.jpg")
colors = source.getcolors(source.size[0] * source.size[1]) #maxcolor value =256, get   all colors with source.size[0] * source.size[1]
pixels = []
for i, color in colors:
    pixels.extend(i * [color])
    pixels.sort()
    new = Image.new('RGB', source.size)
    new.putdata(pixels) 
    new.save("new.png")

对于大约40x40像素的小文件,它可以很好地工作。但目标是在高达3000x2000分辨率的照片上使用它,我尝试运行它,但两小时后仍然没有尽头。代码可以优化,我做了一些完全错误的事情,还是Python根本不适合这种任务?

2 个答案:

答案 0 :(得分:5)

Python中的缩进是关键,否则你可以运行每次迭代都不会的代码。

每次循环时都会保存文件,因为图像生成是缩进的。相反,尝试:

from PIL import Image

source = Image.open("source.jpg")
colors = source.getcolors(source.size[0] * source.size[1]) #maxcolor value =256, get   all colors with source.size[0] * source.size[1]
pixels = []
for i, color in colors:
    pixels.extend(i * [color])
pixels.sort()
new = Image.new('RGB', source.size)
new.putdata(pixels) 
new.save("new.png")

答案 1 :(得分:1)

您从getcolors返回的列表可以直接排序,然后您只需要从中重建图像。

colors = source.getcolors(source.size[0] * source.size[1])
colors.sort(key=lambda pair: pair[1])

此外,作为Boud mentioned,请注意循环内部的内容。