确定对于给定的 RGB 值组合,哪种颜色(红色、蓝色、绿色或其他)可见?

kas*_*kas 5 c# algorithm pixel colors

所以基本上,我需要一个可以传递红色、绿色和蓝色值的方法,并且该方法应该返回 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 
Run Code Online (Sandbox Code Playgroud)

Raf*_*lon 4

如果你将“有颜色”定义为:

  • 颜色值在100以上
  • 颜色值至少是其他 2 个值的 两倍
    • 您当前的代码声明“至少有一半其他值”,但这不起作用,因为如果您有“ R:199 G:101 B:102 ”,您可以说它是绿色的,因为 G 高于 100超过一半 199 和一半 102 (当它明显偏红色时)

那么你的代码看起来几乎不错(只需替换/*)。

我只想使用 anenum作为结果:

enum Ish
{
    Other, // 0 so this would be false if you convert it to bool
    Red,   // 1
    Green, // 2
    Blue   // 3
}
Run Code Online (Sandbox Code Playgroud)
if (R>100 && R>G*2 && R>B*2)
    return Ish.Red;
if (G>100 && G>R*2 && G>B*2) // you had G>G/2 here /!\
    return Ish.Green;
if (B>100 && B>G*2 && B>R*2)
    return Ish.Blue;
return Ish.Other;
Run Code Online (Sandbox Code Playgroud)

我使用了两次 2,但我认为你可以使用其他值,只要它是(例如,>1你不能说蓝色占主导地位B <= R

这将是 R=100 时可能出现的红色值(左图的系数为 2,右图的系数为 1):

红色 100 事实 2 红色 100 事实 1

R=200 时(左图的系数为 2,右图的系数为 1):

红色 200 事实 2 红色 200 事实 1

因此您可能可以使用 1 到 2 之间的系数

对于 R=200,您可以看到红色,具体取决于以下因素:

红色200多因子

  • @kas 不客气,这样做非常有趣(我扩展了最后一个屏幕截图,以便您可以真正看到当因子低于 1 时会发生什么) (2认同)