【问题标题】:Is it possible to compare Colors and if they resemble return true是否可以比较颜色,如果它们相似,则返回 true
【发布时间】:2015-03-23 08:04:51
【问题描述】:

我的意思的一个例子是:

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.");
}

这可能吗?如果可以,我该怎么做?

【问题讨论】:

  • 是的,如果你写一个实现这种逻辑的方法。
  • 发红需要多少 才能通过测试?是否允许混合其他颜色?
  • 那么你将如何指定normality?你现在说的太主观了。例如,您的“栗色”[原文如此] 在黑色背景下看起来会比在绿色背景下更红。
  • Color maroon = #800000; 之类的语句不是有效的 Java。
  • @Jesper 我知道,这只是一个十六进制的例子,我没怎么用过颜色,但以后会用。

标签: java if-statement colors compare


【解决方案1】:

我认为最好的方法是简单地比较红色组件:

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

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

【讨论】:

  • 牛!红色将与白色相提并论!说真的,这是一个困难的领域,博士研究的东西。
【解决方案2】:

如果没有一定程度的主观性,就没有简单的方法可以做到这一点:没有单一的“红色”概念。即使对于您上面给出的示例(血、苹果、草莓),也可以给出不是红色的示例(例如,lobster blood 是蓝色,Granny Smith varietal of apple 是绿色,underripe strawberries 是绿色),甚至是外观这些事物的“红色”示例因照明条件而异。

您需要以足以满足您的应用程序的方式确定您认为“红色”的内容。这可能需要将颜色的成分与“理想红色”的成分进行比较;但是,您可以使用更高级的技术,例如使用某些机器学习模型。鉴于您提出问题的方式,我假设您正在寻找一个相当基本的解决方案。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多