Если ваше изображение является репрезентативным, как я и просил, это так просто:
magick rgb.png -fill white -opaque red result.png
Если вы также хотите повлиять на оттенки «близко к красному» , вы можете применить некоторый пух:
magick rgb.png -fuzz 40% -fill white -opaque red result.png
Обратите внимание, что это также влияет на края красного круга, где он является "красным перьями" .
Если нет, ваш код ImageMagick по существу выполняет «Поворот оттенка» , и, как вы заметили, он влияет на все изображение. Прочитайте страницу Википедии на HSV , прежде чем продолжить. Вот колесо HSI Hue для справки:
Решение состоит в том, чтобы сделать вращение оттенка, но применить его эффекты через маску, которая выбирает только те цвета / области, на которые вы хотите повлиять. Помните, что 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)
Если вы хотите изменить синие (Hue = 240) на желтые (Hue = 60), просто измените это:
H[(H>55)&(H<65)] += 60
в это:
H[(H>115)&(H<125)] -= 90
Если вы хотите расширить диапазон пораженных зеленых, уменьшите 55
в моем коде и / или увеличьте 65
. Если вы хотите переместить зелень в другой оттенок, увеличьте или уменьшите 60
.
Вы можете делать все вышеперечисленное с помощью PIL / Pillow, если хотите - вам не нужно устанавливать (массивный) OpenCV.
Ключевые слова : Изображение, обработка изображений, Python, OpenCV, ImageMagick, Hue, HSL, HSV, поворот оттенка, замена цвета, выборочный цвет, маска.