0

我正在尝试按 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 根本不适合那种任务?

4

2 回答 2

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")
于 2012-04-30T14:12:53.173 回答
1

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

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

此外,正如Boud 提到的,注意循环内的内容。

于 2012-04-30T14:17:39.820 回答