【问题标题】:Compare Pixel Colour - Java比较像素颜色 - Java
【发布时间】:2011-02-21 13:19:35
【问题描述】:

如何使用颜色对象找到相似的彩色像素?我知道看看两种颜色是否相等,您可以使用:

a.equals(b);

其中 a 和 b 是颜色对象,但如果我想找到类似的蓝色阴影怎么办?

【问题讨论】:

    标签: java colors pixel pixels


    【解决方案1】:

    比较颜色是not a trivial problem,有多种不同的指标。 我找不到(很容易)可以做到这一点的图书馆,但如果你有一个彻底的搜索,我相信那里会有一些东西Have a look at this class。同时do some reading!

    【讨论】:

      【解决方案2】:

      在以编程方式调整颜色值时,您有很多选择。一个非常简单的解决方案是简单地随机偏移颜色对象的通道值。将其视为变异颜色 - 只需获取您想要变异的颜色并从中生成更多颜色:

      Color mutateColor(int range){
        int r = a.getRed() + (int)(Math.random() * 2 * range - range);
        r = Math.min(255, Math.max(0, r));
      
        int g = a.getGreen() + (int)(Math.random() * 2 * range - range);
        g = Math.min(255, Math.max(0, g));
      
        int b = a.getBlue() + (int)(Math.random() * 2 * range - range);
        b = Math.min(255, Math.max(0, b));
      
        return new Color(r, g, b);
      }
      

      这是最简单的例子,给定一个范围,每个通道偏移相同的范围,结果如下:

      这是在范围值为 10 的情况下完成的。为了增加控制,您可以向 mutateColor 函数添加三个参数(每个单独通道的偏移量)。您也可以采用一个范围,但根据通道中已有的值对其进行更改。例如:

      range = 0.25
      red = 100
      green = 10
      blue = 0
      
      redRange = 100 + rand(-25, 25)
      greenRange = 10 + rand(-2.5, 2.5);
      etc...
      

      这只是众多其他可能性之一。

      如果您想比较两种颜色的公差,我从 fredley 的链接中移植了代码,它可以很好地获取两种颜色之间的差异:

      double colorDist(Color e1, Color e2){
        long rmean = ( (long)e1.getRed() + (long)e2.getRed() ) / 2;
        long r = (long)e1.getRed() - (long)e2.getRed();
        long g = (long)e1.getGreen() - (long)e2.getGreen();
        long b = (long)e1.getBlue() - (long)e2.getBlue();
        return Math.sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
      }
      

      【讨论】:

      • 这个能返回的最大值是多少?
      • 快速浏览一下,周围的东西:764 给出:Math.sqrt((((512+127)*255*255)>>8) + 4*255*255 + (((767 -127)*255*255)>>8));
      【解决方案3】:

      如果我想找到类似的蓝色阴影怎么办?

      我不知道这可能意味着什么技术定义。但是,您可以使用HSL Color 创建您自己的定义。

      基本上,我想您可以先确保每种颜色的色调为 +/- 固定度数。然后您可以通过检查饱和度和/或亮度是否在您想要的范围内来进一步缩小范围。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-11
        • 2014-12-01
        • 1970-01-01
        • 2012-09-05
        • 1970-01-01
        • 2011-06-14
        相关资源
        最近更新 更多