我正在尝试按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根本不适合这种任务?
答案 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,请注意循环内部的内容。