ImageMagick无法显式更改图像的阴影颜色

时间:2019-05-04 09:34:11

标签: image-processing colors imagemagick

我想使用 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,O。

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

输出样本: RGB image colour change

预期的输出:在上述“输出-0”的输出中,其效果为红色,黄色和粉红色。我想要只影响红色的命令。其他颜色也是如此。

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

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

1 个答案:

答案 0 :(得分:1)

如果您的图片具有我的代表性,就这么简单:

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代码实际上就是执行“色调旋转” ,并且您已经注意到,它会影响整个图像。在继续之前,请先阅读Wikipedia page on HSV。这是HSI色相轮供参考:

enter image description here

解决方案是进行色相旋转,但通过仅选择要影响的颜色/区域的遮罩应用其效果。请记住,OpenCV将色相从0..360减至0..180,以便可以将色相存储在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)

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,色相,HSL,HSV,色相旋转,颜色替换,选择颜色,遮罩。