ImageMagick Невозможно явно изменить цвет в оттенке для изображения - PullRequest
2 голосов
/ 04 мая 2019

Я хочу использовать ImageMagick , чтобы изменить цвет в тени.

Я могу управлять изменением оттенка, используя:

convert input.png  -colorspace HCL -channel R  -evaluate set 5%  +channel -colorspace sRGB output.png 

Используя установить XX% Я могу получить различные цвета, такие как, красный, зеленый, желтый,синий, розовый, небесно-голубой, серый и т. д.

Следующая команда работает для нацеливания на синий цвет:

convert input.png  -colorspace HCL -channel R -separate +channel -level 48,52% output.png 

Но я не могу указать другой цвет явно.

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

Есть ли способ явно изменитьодин цвет в оттенке:

  • желтый
  • голубой
  • розовый
  • зеленый
  • белый
  • черный
  • красный

Я пытался изменить все -канал : R, G, B, C, M, Y, K, A, О.

Используя опцию -separate , я могу нацелиться на RBG, но проблема с RGB - это эффект R красный, желтый и розовый, эффект G зеленый, небесно-голубой и желтый и эффект B синий, розовыйи небесно-голубой.

образец для вывода: Изменение цвета изображения RGB

ожидаемый вывод : в вышеприведенном выводе для «output-0» эффект красный, желтыйи розовый.я хочу команду, которая будет влиять только на красный.аналогично для других цветов.

ссылки, которые я использовал: https://www.imagemagick.org/discourse-server/viewtopic.php?t=33361

Я использую python для запуска этой команды.Я также открыт для использования других библиотек, которые будут работать со всеми цветами явно.

1 Ответ

1 голос
/ 04 мая 2019

Если ваше изображение является репрезентативным, как я и просил, это так просто:

enter image description here

magick rgb.png -fill white -opaque red result.png

enter image description here

Если вы также хотите повлиять на оттенки «близко к красному» , вы можете применить некоторый пух:

magick rgb.png -fuzz 40% -fill white -opaque red result.png

enter image description here

Обратите внимание, что это также влияет на края красного круга, где он является "красным перьями" .


Если нет, ваш код ImageMagick по существу выполняет «Поворот оттенка» , и, как вы заметили, он влияет на все изображение. Прочитайте страницу Википедии на HSV , прежде чем продолжить. Вот колесо HSI Hue для справки:

enter image description here

Решение состоит в том, чтобы сделать вращение оттенка, но применить его эффекты через маску, которая выбирает только те цвета / области, на которые вы хотите повлиять. Помните, что OpenCV делит цветовой тон пополам в диапазоне от 0..360 до 0..180, чтобы он мог сохранить оттенок в np.uint8.

Итак, если мы загружаем то же изображение, что и выше, и выбираем только зеленые (где Hue около 120), мы можем повернуть только те в синий, добавив 60 (Hue = 240):

#!/usr/local/bin/python3
import cv2 as cv
import numpy as np

# Load the image and convert to HSV colourspace
image = cv.imread("rgb.png")

# Convert to HSV and split channels
hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)
H,S,V = cv.split(hsv)

# Shift only greens (Hue near 120) around hue circle by 120 degrees to blues - remembering OpenCV halves all these values - see comment
H[(H>55)&(H<65)] += 60

# Recombine into single 3-channel image and convert back to RGB
result = cv.merge((H,S,V))
result = cv.cvtColor(result,cv.COLOR_HSV2BGR)

cv.imwrite("result.png",result)

enter image description here


Если вы хотите изменить синие (Hue = 240) на желтые (Hue = 60), просто измените это:

H[(H>55)&(H<65)] += 60

в это:

H[(H>115)&(H<125)] -= 90

enter image description here


Если вы хотите расширить диапазон пораженных зеленых, уменьшите 55 в моем коде и / или увеличьте 65. Если вы хотите переместить зелень в другой оттенок, увеличьте или уменьшите 60.

Вы можете делать все вышеперечисленное с помощью PIL / Pillow, если хотите - вам не нужно устанавливать (массивный) OpenCV.

Ключевые слова : Изображение, обработка изображений, Python, OpenCV, ImageMagick, Hue, HSL, HSV, поворот оттенка, замена цвета, выборочный цвет, маска.

...