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 の解像度の写真で使用することでした。実行してみましたが、2 時間経ってもまだ終わりが見えませんでした。コードを最適化できますか、完全に間違ったことをしましたか、それとも 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 に答える