Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing ImageMagick无法为图像显式更改阴影中的颜色_Image Processing_Colors_Imagemagick - Fatal编程技术网

Image processing ImageMagick无法为图像显式更改阴影中的颜色

Image processing ImageMagick无法为图像显式更改阴影中的颜色,image-processing,colors,imagemagick,Image Processing,Colors,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 -s

我想使用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效果蓝色、粉色和天蓝色

输出样本:

预期输出:在上述“输出-0”的输出中,其效果为红色、黄色和粉色。我要的命令只对红色生效。其他颜色也一样

我使用的链接:


我正在使用python来运行这个命令。我也愿意使用其他库,这些库将明确使用所有颜色

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

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

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

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


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

解决方案是进行色调旋转,但通过仅选择希望影响的颜色/区域的遮罩应用其效果。请记住,OpenCV将色调从0..360到0..180的范围减半,以便将色调存储在
np.uint8

因此,如果我们加载与上面相同的图像并仅选择绿色(其中色调接近120),我们可以通过添加60(色调=240)将这些图像旋转为蓝色:

#/usr/local/bin/python3
将cv2作为cv导入
将numpy作为np导入
#加载图像并转换为HSV颜色空间
image=cv.imread(“rgb.png”)
#转换为HSV和拆分频道
hsv=cv.cvt颜色(图像,cv.COLOR\u BGR2HSV)
H、 S,V=等速分割(hsv)
#仅将色调圆周围的绿色(色调接近120)移动120度至蓝色-记住OpenCV将所有这些值减半-请参阅注释

H[(H>55)和(H55)和(H115)&(请提供一个代表您正在使用的图像的示例,并显示您期望的结果。我有一个bash Imagemagick脚本,可以更改各个颜色。请参阅我的脚本huemap,在。这是一种色调旋转效果。黑色和白色不是色调,因此您无法更改它们。为此,请使用-fuzz XX%-填充skybluE-不透明的白色改变白色到天蓝色。你也可以按照Mark Setchell的回答来做任何颜色。我的答案是否解决了你的问题?如果是的话,请考虑把它当作你的答案——点击投票计数旁边的空心滴答声。如果不是,请说什么不起作用,这样我或其他人可以进一步帮助你。汉克斯。谢谢你的回答,
H[(H>115)&(HRed以零为中心,当用色调圈环绕时,会触及360(即180),因此你需要寻找
(H175)
,或者您可以反转RGB图像并查找青色。黑色和白色没有色调,因为它们都是不饱和的。因此,要查找黑色,您需要查找低饱和度(即无颜色)和低值(即暗)。要查找白色,您需要查找低饱和度(即无颜色)和高值(即亮)。计算任何颜色的简单方法是从图像中裁剪出一块该颜色,将其转换为HSV,然后看看你得到了什么,可能是通过平均,即
print(H.mean(),H.min(),H.max())
magick rgb.png -fuzz 40% -fill white -opaque red result.png
#!/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)
H[(H>55)&(H<65)] += 60
H[(H>115)&(H<125)] -= 90