是否可以比较颜色,如果它们类似于返回true

时间:2015-03-23 08:04:51

标签: java if-statement colors compare

我的意思是:

Color maroon = #800000;
Color red = #ff0000;

if (red <resembles> maroon) //which would return true because they're both red colors.{
//...
} else {
System.out.println("The colors did not resemble.");
}

这是可能的,如果可以的话,我该如何做呢?

2 个答案:

答案 0 :(得分:0)

嗯,我认为最好的方法是简单地比较红色成分:

public boolean checkIfSimilar(Color c1, Color c2) {
    int threshold = 10;
    if(c1.getRed() - c2.getRed() < threshold){
        return true;
    }
    return false;
}

您只需根据您希望这些颜色相似的程度来定义阈值。

答案 1 :(得分:0)

没有一定程度的主观性,没有简单的方法可以做到这一点:没有单一的“红色”概念。即使你上面给出的例子(血,苹果,草莓),也可以给出不是红色的例子(例如lobster blood是蓝色,Granny Smith varietal of apple是绿色,underripe strawberries是绿色)甚至根据照明条件,这些东西的“红色”例子的外观也大不相同。

您需要确定您认为“红色”的方式足以满足您的应用需求。这可能需要将颜色成分与“理想发红”的成分进行比较;但是,您可以使用更先进的技术,例如使用一些机器学习模型。考虑到你提出问题的方式,我认为你正在寻找一个相当基本的解决方案。

您应该考虑为RGB使用不同的色彩空间。例如,HSL(色调饱和度亮度)在第一个组件(“色调”)中为您提供类似于标准化颜色的内容。您可以将此色调与红色的某些参考值进行比较,然后进行亮度不变的比较。

我会提到HSL的两个主要警告:

  1. Hue是一个圆形空间,即你需要考虑在确定与参考点的距离时包装其值;
  2. 检查饱和度很重要,因为色调未定义为“颜色”,如白色或黑色。