Проблемы с обрезкой целых белых линий из файла.png

Что я хочу сделать, это обрезать белые линии над данным экраном печати Instagram. Я попытался сделать это, найдя центр изображения и двигаясь вверх, строка за строкой, пока не нашел первую строку полностью белой. Есть идеи, почему мой код не работает?

from PIL import Image

image_file = "test.png"
im = Image.open(image_file)
width, height = im.size
centerLine = height // 2

entireWhiteLine = set()
entireWhiteLine.add(im.getpixel((0, 0)))
terminateUpperCrop = 1

while terminateUpperCrop != 2 :

    for i in range(centerLine, 1, -1) :
        entireLine = set()
        upperBorder = i - 1
        for j in range(0, width, 1) :
            entireLine.add((im.getpixel((i, j))))
            if entireLine == im.getpixel((0,0)):
                box = (0, upperBorder, width, height)
                crop = im.crop((box))
                crop.save('test2.png')
                terminateUpperCrop = 2

1 ответ

Решение

Ваш getpixel() call на самом деле ищет координаты в неправильном направлении, поэтому вы сканировали левый край. Вы можете использовать следующий подход. Это создает строку данных, содержащую только белые пиксели. Если длина строки равна вашей ширине, то вы знаете, что все они белые.

from PIL import Image

image_file = "test.png"
im = Image.open(image_file)
width, height = im.size
centerLine = height // 2

white = (255, 255, 255)

for y in range(centerLine, 0, -1) :
    if len([1 for x in range(width) if im.getpixel((x, y)) == white]) == width - 1:
        box = (0, y, width, height)
        crop = im.crop((box))
        crop.save('test2.png')
        break
Другие вопросы по тегам