Как выбрать все оттенки серого?

В ImageMagick конвертировать я могу выбрать определенный цвет, например, -opaque blue, Как выбрать все цвета в градациях серого (например, #000000, #707070, #ffffff)?

1 ответ

Решение

Не уверен, что вы пытаетесь сделать, но это может помочь. Пиксели градаций серого будут иметь нулевую насыщенность, так что это, вероятно, самый простой способ их идентификации.

Сначала сделайте образец изображения в стиле фанк:

 convert -size 400x100 gradient:black-white -bordercolor red -border 80 image.png

введите описание изображения здесь

Теперь сделайте все серые области (с очень низкой насыщенностью) прозрачными:

convert image.png -alpha on -channel A -fx "saturation<0.01?0:1" result.png

введите описание изображения здесь

Заметка

Обратите внимание, что -fx Оператор очень мощный, но заведомо медленный, потому что он на самом деле интерполируется для каждого пикселя. Если ваши изображения большие, следующая техника может быть более подходящей.

По сути, я клонирую изображение и превращаю все это в HSL цветовое пространство и разделить каналы. Затем я отбрасываю каналы Hue и Lightness, так что мне остается только насыщенность. Затем я пороговую и копирую это обратно в исходное изображение как альфа-канал. На изображении 2000x2000 пикселей этот метод будет выполняться менее чем за секунду, тогда как -fx Метод потребует 5-6 секунд.

convert image.png \( +clone -colorspace hsl -separate -delete 0,2 -threshold 1% \) -compose copy-opacity -composite result.png
Другие вопросы по тегам