Ваш подход не идеален. Во-первых, вы можете сделать это намного проще с ImageMagick , который включен в большинство Linux дистрибутивов и доступен для macOS и Windows. Просто в Терминале это инвертирует все файлы в текущем каталоге:
magick mogrify -negate *.jpg
Или, если вы хотите, чтобы они были сохранены в каталоге с именем results
:
mkdir results
magick mogrify -path results -negate *.jpg
Если вы хотите придерживаться Python и PIL / Pillow, в его ImageOps
модуле уже есть invert()
функция :
#!/usr/local/bin/python3
from PIL import Image, ImageOps
# Load image
im = Image.open('image.jpg')
# Invert
result = ImageOps.invert(im)
# Save
result.save('result.jpg')
Если вы не хотите использовать встроенный invert()
, вам будет намного лучше, если использовать point()
функцию здесь :
#!/usr/local/bin/python3
from PIL import Image
# Load image
im = Image.open('image.jpg')
# Negate
result = im.point(lambda p: 255 -p)
# Save
result.save('result.jpg')
Примечание : Как правило, как только вы начинаете использовать for
l oop или getdata()
с изображением в Python, вы, вероятно, уже ошиблись. Вы должны использовать встроенные библиотечные функции или Numpy на самом деле, в противном случае все будет бездействующим.