我有一组天空图像,一些有云,有些没有。
有些是晴朗的蓝天,有些是阴天,有些是白色和灰色的云。
如何判断特定RGB值是或多或少是蓝色?
任何蓝色的阴影都是'蓝色' - 浅蓝色,深蓝色,深蓝色,天蓝色 - 这些都是蓝色的。
我想将图像中的颜色减少到16个。然后我想制作白色,银色,灰色,蓝色和“其他所有”的直方图。
我如何从RGB值知道什么是蓝色或银色,白色或灰色,还是其他什么?
答案 0 :(得分:13)
RGB不是处理此类事情的最佳色彩空间。诸如HSV (also known as HSB)之类的颜色空间为给定颜色提供了更直观和描述性的模型。
所以,为了得到你所拥有的,你可以使用给定颜色的色调。如果您正在处理System.Drawing.Color
结构,则可以使用GetHue()方法返回以度为单位的色调值。给定如下的Hue轮,您可以定义您将接受的Blue值的上限和下限(以度为单位)。
一般来说,图像处理和色彩理论远非琐碎的主题。我建议你找到最符合你要求的方法。这对你来说可能已经足够,或者可能不是。如果没有,那么也许你可以为我缩小一点问题。
还要意识到亮度和饱和度组件仍然需要一些阈值,以确保您实际上没有处理黑色,白色或灰色。
答案 1 :(得分:2)
如果红色和绿色值接近相同,并且蓝色值大于红色和绿色值,则颜色将在蓝色范围内。如果所有三个值大致相同,则表示您有一些灰色版本,如果它们都接近最大值,则颜色将显示为白色。它不可能比那更精确 - 你需要只看一个颜色选择器,找出哪个区域看起来像是“蓝色”。
答案 2 :(得分:0)
也许为所需的16种颜色构建一个包含RGB值的表格,然后将每个像素RGB值与表格中的每个值进行比较。 为了比较R1-R2 G1-G2 B1-B2之类的减法,然后总结差异并将其转换为不同的颜色。