我的意思是:
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.");
}
这是可能的,如果可以的话,我该如何做呢?
答案 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的两个主要警告: