【发布时间】:2020-05-08 10:13:18
【问题描述】:
所以基本上,我需要一种方法,我可以在其中传递红色、绿色和蓝色的值,并且该方法应该返回 RGB 值的组合是否会导致明显的红色绿色或蓝色.如果组合没有产生这三种颜色中的任何一种,它应该返回 false。
我尝试通过使用条件语句来做到这一点,尝试了一些变体,但没有什么是准确的。
例如我试过:
if (B > 100 && B > G / 2 && B > R / 2)
{
blueCount++;
}
else if (G > 100 && G > G / 2 && G > B / 2)
{
greenCount++;
}
else if (R > 100 && R > G / 2 && R > B / 2)
{
redCount++;
}
// R , G , B contains 0-255 values
【问题讨论】:
-
这有很多边缘情况,让我头晕目眩,你会说什么黑色?什么是灰色?当GB都是100时呢?会说它比 B 更 G
-
您可能想要使用
HSV颜色模型并检查H(Hue) 并且可能是S(Saturation):如果我们有权利Hue(比如说,Green)而且不是很低Saturation(不是太无色的湖灰、白色、黑色)我们可以说我们有一个绿色 -
@MarkDavies "如果组合没有产生这三种颜色中的任何一种,它应该返回 false" - 但我明白你的意思是应该定义 什么时候是颜色 [red|green|blue]-ish
-
您是否考虑过您的方法,而不是返回真/假,可以返回所提供颜色的“纯度”百分比?例如,255;0;0 是 100% 纯色,128;0;0 是 50% 纯色,255;128;128 是 50% 纯色......我不知道,类似的东西跨度>