0

我主要有黑白图像,有些部分是彩色的(假设它是黄色和绿色)。我想知道这些颜色。

为此,我想我可能会将图像转换为黑白,然后将黑白图像与原始图像进行比较以找出差异。但我不太确定我应该使用哪种算法来做到这一点。

伪代码中的类似内容:

image = image_from_file('image.jpg')
bw_image = image.convert_to_bw
diff_image = (bw_image - image)
# Build histogram w/o black and white parts, only color ones
diff_image.histogram

我主要专注于 libvips 来做到这一点,但我只需要一个关于如何做到这一点的建议,然后我就可以编写代码了。

如果您知道我上面描述的任何其他方法,我也将不胜感激。

4

2 回答 2

3

此处正确的方法是转换为 HSV 或类似的色彩空间,以分离饱和度或色度。然后找到饱和度/色度值较高的像素。

HSV(或类似)颜色空间的色调分量然后为您提供这些像素的颜色(黄色或绿色,作为色度平面上的角度)。

我无法发布代码,因为您使用两种不同的语言标记了问题,我不知道其中哪一个是您发布的代码片段。我希望你能从这里拿走它。

于 2018-02-28T15:46:47.853 回答
2

在 ruby​​-vips 你可以这样做:

require 'vips'

a = Vips::Image.new_from_file ARGV[0]

# convert to LCh colourspace
a = a.colourspace "lch"

# Chroma (band 1) > 0 means we have some colour ... take > 10, since things 
# like jpg compression will add some colour noise we are not 
# interested in
mask = a[1] > 10

# the mask image will have 255 for TRUE pixels and 0 for FALSE
mask.write_to_file "mask.png"

掩码图像可能不是很有帮助,但我不清楚您需要什么输出。

LCh 色彩空间在这里很有用:带 1(即 C)是像素到中性轴的距离,我认为这正是您想要的。

于 2018-02-28T22:03:49.863 回答