Как выбрать все оттенки серого?
В 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