Инвертирование изображения с помощью модуля библиотеки изображений Python - PullRequest
1 голос
/ 19 мая 2010

Мне интересно узнать, как инвертировать (сделать негатив) изображение с помощью модуля библиотеки изображений Python.

Однако я не могу использовать функцию ImageOps «инвертировать». Мне нужно другое решение, используя значения RGB. Я искал и пытался безрезультатно.

Ответы [ 3 ]

0 голосов
/ 19 мая 2010

Одним из очевидных способов является использование Image.getpixel и Image.putpixel, для RGB каждый должен быть кортежем из трех целых чисел. Вы можете получить (255-р, 255-г, 255-б), а затем положить его обратно.

Или используйте pix = Image.load (), что кажется быстрее.

Или, если вы загляните в ImageOps.py, он использует справочную таблицу (lut list) для сопоставления изображения с инвертированным.

Или, если это не противоречит правилам вашего назначения, вы можете использовать Numpy. Тогда вы можете использовать более быструю матричную операцию.

0 голосов
/ 19 мая 2010

Если вы работаете с модулем media, то вы можете сделать это:

import media
def invert():
    filename = media.choose_file()    # opens a select file dialog
    pic = media.load_picture(filename)    # converts the picture file into a "picture" as recognized by the module.
    for pixel in pic:
        media.set_red(pixel, 255-media.get_red(pixel))    # the inverting algorithm as suggested by @Dingle
        media.set_green(pixel, 255-media.get_green(pixel))
        media.set_blue(pixel, 255-media.get_blue(pixel))
print 'Done!'

Процесс аналогичен, если вы используете модуль picture, и выглядит следующим образом:

import picture
def invert():
    filename = picture.pick_a_file()    # opens a select file dialog
    pic = picture.make_picture(filename)    # converts the picture file into a "picture" as recognized by the module.
    for pixel in picture.get_pixels(pic):
        picture.set_red(pixel, 255-picture.get_red(pixel))    # the inverting algorithm as suggested by @Dingle
        picture.set_green(pixel, 255-picture.get_green(pixel))
        picture.set_blue(pixel, 255-picture.get_blue(pixel))
print 'Done!'

Надеюсь, это поможет

0 голосов
/ 19 мая 2010

Просто вычтите каждое значение RGB из 255 (или максимум), чтобы получить новые значения RGB. В этом посте рассказывается, как получить значения RBG из рисунка.

...