Python/Pillow: фильтровать пиксели с максимальным/минимальным значением RGB

У меня есть изображение, в котором каждый пиксель представляет собой случайную комбинацию максимальных и минимальных значений RGB (т.е. [255, 0, 255], [0, 0, 255], [255,255,255]).

Тем не менее, изображение содержит некоторый текст, который скрыт за очень небольшим, незаметным обесцвечиванием в шуме. Я пытаюсь написать простой Python, чтобы отбелить все пиксели, содержащие максимальные или минимальные значения RGB, чтобы скрытое сообщение было четко видно.

Программа должна быть предельно простой, примерно такой:

open image
get width and height
for x in width
   for y in height
       if any channel value of pixel (x,y) is either 0 or 255
          set color of (x,y) to [255, 255, 255]

Основная часть, на которой я застрял, — это условие изменения цвета; Я мог бы отдельно проверить сначала красное значение каждого пикселя, потом зелёное, потом синее, но так как я пытаюсь сделать код максимально компактным, то хотелось бы знать, как тестировать все три элемента в массиве одновременно, а не использовать отдельные операторы if. Любые подсказки будут оценены. Спасибо!


person amiller3513    schedule 02.08.2015    source источник
comment
В дополнение к @user880772 вы можете прочитать содержимое справочного центра, особенно Как спросить.   -  person boardrider    schedule 02.08.2015


Ответы (1)


Поскольку значения RGB задаются в виде единого массива, вы можете использовать ключевое слово in< /а>:

# channels = [255, 0, 0]
if 0 in channels or 255 in channels:
    channels = [255, 255, 255]

Вы даже можете комбинировать несколько in проверок, но это было бы слишком всего за 2 чека.

person approxiblue    schedule 02.08.2015
comment
Это было именно то, что мне было нужно. Спасибо большое. - person amiller3513; 02.08.2015