【问题标题】:Compare color shades?比较颜色深浅?
【发布时间】:2013-11-11 22:11:30
【问题描述】:

我有两种颜色,我如何检查它们是否相同颜色但只是不同的色调?我一直在尝试,但我似乎无法弄清楚,我真的不知道我在做什么哈哈……这是我到目前为止所拥有的:

import java.awt.Color;

public class Sandbox {

    public Sandbox() {
        Color c = new Color(5349322);
        int r, g, b;
        r = c.getBlue();
        g = c.getGreen();
        b = c.getRed();
        System.out.println("Red: " +  r);
        System.out.println("Green: " + g);
        System.out.println("Blue: " + b);
    }

    private boolean FindColorTol(int intTargetColor, int Tolerance) {
        Color targetColor = new Color(intTargetColor);
        Color imgColor = new Color(5349322);
        int targetRED = targetColor.getBlue(),
            targetGREEN = targetColor.getGreen(),
            targetBLUE = targetColor.getRed(),
            imgRED = imgColor.getBlue(),
            imgGREEN = imgColor.getGreen(),
            imgBLUE = imgColor.getRed();

        return false;
    }

    private int getLargest(int...values) {
        int largest = 0;
        for(int i = 0; i < values.length; i++) {
            if(values.length > i + 1) {
                if(values[i] > values[i + 1]) 
                   largest = values[i];
               else 
                   largest = values[i + 1];
           }
       }
        return largest;
    }

    public static void main(String[] args) {
        new Sandbox();
    }
}

还有,为什么 Color.getRed() 会返回蓝色的值,而 Color.getBlue() 的返回值会返回红色的值?我正在使用它来查找 RGB 值:http://www.colorschemer.com/online.html

我正在尝试使用它在图像中查找指定颜色。

【问题讨论】:

  • 我不是这方面的专家,但如果你得到 Color 对象的 HSB(色相饱和度亮度)并比较色相,你就可以很好地设置。 Color 类具有提取此内容的方法,您可能需要查看Color API 了解详细信息。
  • 那么,我是否应该找到我想要比较的颜色的 HSB 与我的控制颜色的 HSB 并将两者相减?
  • 所以黑色是白色的不同色调?
  • @AndrewThompson - 是的,黑色是一切的不同色调。白色和浅色也是如此。

标签: java image image-processing colors


【解决方案1】:

colour theory 中,您可以通过将颜色与不同数量的黑色混合来获得阴影。因此,您可以通过标准化它们的值轻松检查两个 RGB 三元组是否对应于相同颜色的不同阴影

max1 = max(r1,g1,b1);
max2 = max(r2,g2,b2);
if ( approxEQ(r1/max1,r2/max2,DELTA) && 
     approxEQ(g1/max1,g2/max2,DELTA) && 
     approxEQ(b1/max1,b2/max2,DELTA) ) {

  /* Same colour, different shades */

}

(显然,max(a,b,c) 返回三个参数中最大的一个,如果 |a-b|≤dapproxEQ(a,b,d) 返回 true,否则返回 false。)

如果您还想检查色调,最好使用converting your RGB values to HSV or HSL

【讨论】:

    【解决方案2】:

    也许HSL Color 会有所帮助。严格来说,我认为色相和饱和度需要是相同的值。

    【讨论】: