Color Modes

颜色阈值

使用颜色阈值指定颜色范围并返回黑白图像。所有介于开始颜色和结束颜色(包括)之间的颜色都变为白色,图像的其余像素变为黑色。两种颜色之间用连字符隔开。默认情况下,阈值操作在 sRGB 色彩空间中进行。使用 -colorspace 选项在其他色彩空间中执行阈值操作(目前仅限于 sRGB、Gray、HSV、HSL、HCL、HSB 和 HSW)。开始颜色和结束颜色可以在任何色彩空间中指定(ImageMagick 识别),但通常建议在与 -colorspace 选项对应的色彩空间中指定它们。对于 Gray 色彩空间,请确保使用小于结束值的开始值。请注意,色调是循环的 -- 0 和 360 是相同的。但是,如果开始色调值大于结束色调值,那么跨越色调 = 0 的颜色范围可能仍然有用。

混合开始颜色和结束颜色与图像的色彩空间时,建议谨慎。一个色彩空间中的较大范围可能映射到另一个色彩空间中的较窄范围。例如,人们可能会天真地认为 sRGB(0,0,0)sRGB(255,255,255) 会产生一个白色图像,捕获所有颜色,即使使用 -colorspace HSV。但是这两个颜色是黑色和白色,因此只映射到 hsv(0,0%,0%)hsv(0,0%,100%) 的灰度范围。对于彩色图像,您可能不会发现太多灰色的像素。

要说明颜色阈值是如何执行的,请使用此图像

convert input-image -colorspace XXX -color-threshold "start - stop" output-image

以下是一些典型的使用示例

    [Color Thresholding]

首先选择一种 sRGB 颜色(图像上的某个位置 - 在这种情况下是花朵的黄色)并将其向下和向上偏移,形成两种 sRGB 颜色。较低的值形成开始颜色,较高的值形成结束颜色。从 sRGB(183,132,20) 开始。将它的值偏移 +-20 以识别开始颜色 (-) 和结束颜色 (+);即,R=183+-20、G=132+-20 和 B=40+-20

magick monet.jpg -color-threshold 'sRGB(163,112,0)-sRGB(203,152,40)' monet.gif

这将返回黄色花瓣的轮廓

    [Color Thresholding]

现在,选择两种 RGB 颜色:sRGB(159,150,0)sRGB(205,100,45):

magick monet.jpg -color-threshold 'sRGB(159,150,0)-sRGB(205,100,45)' monet.gif

    [Color Thresholding]

Next, select one sRGB color and convert it to HSV and offset its values low and high to generate the start and stop HSV colors. Use -colorspace HSV to convert the image to HSV. For our HSV example, we pick sRGB(183,132,20) and convert to HSV:

magick xc:"srgb(183,132,20)" -colorspace HSV txt:
# ImageMagick pixel enumeration: 1,1,65535,hsv
0,0: (41.227,89.071%,71.7647%) #1D51E405B7B7 hsv(41.227,89.071%,71.7647%)

Now, offset its HSV values as H=41+-20, S=89+-10, and V=72+-10, to create the start color (-) and stop color (+):

magick monet.jpg -colorspace HSV -color-threshold 'hsv(21,79%,62%)-hsv(61,99%,85%)' monet.gif
    [Color Thresholding]

Next, pick two RGB colors. Use -colorspace HSV to convert the image to HSV, and apply the RGB start and stop colors. Choose sRGB(158,77,33) and sRGB(213,217,2):

magick monet.jpg -colorspace HSV -color-threshold "sRGB(158,77,33)-sRGB(213,217,2)" monet.gif

Here is the expected results:

    [Color Thresholding]

Next, choose two sRGB colors and convert them to gray. Now convert the image to gray and use the gray thresholding colors.

magick xc:"sRGB(159,150,0)" -colorspace gray txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (36259.1) #8DA38DA38DA3 gray(55.3278%)

magick xc:"sRGB(205,100,45)" -colorspace gray txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (30418.2) #76D276D276D2 gray(46.4152%)

Notice that the start intensity must be smaller than stop intensity:

magick monet.jpg -colorspace gray -color-threshold 'gray(46.4152%)-gray(55.3278%)' monet.gif

Here is the results of the color thresholding operation:

    [Color Thresholding]