首页 > 解决方案 > ImageMagick 无法显式更改图像的阴影颜色

问题描述

我想使用ImageMagick来改变阴影的颜色。

我可以使用以下方法管理阴影变化:

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

使用set XX%我可以获得不同的颜色,如红色、绿色、黄色、蓝色、粉色、天蓝色、灰色等。

以下命令适用于定位蓝色:

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

但我无法明确定位其他颜色。

例如,如果我想用其他颜色改变绿色,结果图像也会影响绿色、黄色、红色和天蓝色。

有没有办法显式更改阴影中的单一颜色:

我尝试更改所有通道:R,G,B,C,M,Y,K,A,O。

使用-separate选项我可以定位 RBG,但 RGB 的问题是 R 效果红色、黄色和粉色,G 效果绿色、天蓝色和黄色以及 B 效果蓝色、粉色和天蓝色。

输出样本: RGB 图像颜色变化

预期输出:在上面的“output-0”输出中,它影响红色、黄色和粉红色。我想要只影响红色的命令。其他颜色也类似。

我使用的链接:https ://www.imagemagick.org/discourse-server/viewtopic.php?t=33361

我正在使用 python 来运行这个命令。我也愿意使用其他可以显式处理所有颜色的库。

标签: image-processingcolorsimagemagick

解决方案


如果您的图像像我要求的那样具有代表性,就这么简单:

在此处输入图像描述

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

在此处输入图像描述

如果您还想影响“接近红色”的色调,您可以应用一些模糊:

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

在此处输入图像描述

请注意,这也会影响红色圆圈的边缘,它是“羽毛红色”


如果没有,您的 ImageMagick 代码实际上是在进行“色调旋转”,并且正如您所注意到的,它会影响整个图像。在继续之前阅读有关 HSV 的 Wikipedia 页面。这是一个 HSI Hue 轮供参考:

在此处输入图像描述

解决方案是进行色相旋转,但通过仅选择您想要影响的颜色/区域的蒙版应用其效果。请记住,OpenCV 将 Hue 从 0..360 到 0..180 范围内减半,以便它可以将 Hue 存储在np.uint8.

因此,如果我们加载与上面相同的图像并仅选择绿色(色调接近 120),我们可以通过添加 60(色调=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、色调、HSL、HSV、色调旋转、颜色替换、选择性颜色、遮罩。


推荐阅读