5

できれば行の色に基づいて、画像から行全体を削除する方法を知りたいですか?

例:高さが5ピクセルの画像があり、上の2行と下の2行は白で、中央の行は黒です。PILにこの黒いピクセルの行を識別させてから、行全体を削除して新しい画像を保存する方法を知りたいです。

私はPythonについてある程度の知識があり、これまで「getdata」の結果を一覧表示して画像を編集してきたので、擬似コードを使用した回答で十分な場合があります。ありがとう。

4

1 に答える 1

7

完全に黒であるすべての行を削除する次のコードを作成しました。ループがブレークによって終了しないときに実行されるループのelse句を使用します。for

from PIL import Image

def find_rows_with_color(pixels, width, height, color):
    rows_found=[]
    for y in xrange(height):
        for x in xrange(width):
            if pixels[x, y] != color:
                break
        else:
            rows_found.append(y)
    return rows_found

old_im = Image.open("path/to/old/image.png")
if old_im.mode != 'RGB':
    old_im = old_im.convert('RGB')
pixels = old_im.load()
width, height = old_im.size[0], old_im.size[1]
rows_to_remove = find_rows_with_color(pixels, width, height, (0, 0, 0)) #Remove black rows
new_im = Image.new('RGB', (width, height - len(rows_to_remove)))
pixels_new = new_im.load()
rows_removed = 0
for y in xrange(old_im.size[1]):
    if y not in rows_to_remove:
        for x in xrange(new_im.size[0]):
            pixels_new[x, y - rows_removed] = pixels[x, y]
    else:
        rows_removed += 1
new_im.save("path/to/new/image.png")

質問がある場合は質問してください:)

于 2012-10-07T16:47:55.973 に答える