【问题标题】:Comparing RGB values比较 RGB 值
【发布时间】:2018-05-02 18:58:55
【问题描述】:

我正在用 java 设计一个程序,用于比较图片中的像素及其 RGB 值。例如,我有一列像素,我想为每个像素分配一个值,并根据比例对每个像素进行排名。

示例比例:

深绿色=500 > 浅绿色=400 > 黄色=300 > 浅红色=200 > 深红色=100

当像素是浅绿色和深绿色之间的颜色时,我希望能够获得/打印这些值以及介于两者之间的所有内容,例如获得 430 之类的值。我努力寻找一种可以让我比较这些颜色的方法。

【问题讨论】:

  • 你的问题是......?
  • RGB 对于颜色比较来说很糟糕。考虑转换为LAB,或至少转换为HSB
  • 如果您使用 RGB 值,则平均颜色是 R、G 和 B 值的平均值。请参阅:stackoverflow.com/questions/25878029/… 的实现,其中 P 的值设置为 0.5
  • 您似乎只想按色调值对颜色进行排序。尽管如此,当它们的饱和度或值发生变化时,您将不会得到好的结果。比较颜色通常是一个无法解决的话题。您可能还想看看 delta e2000 算法。
  • @Compass: 移位 R+10, G-10 与 R-10, G+10 提供非常不同的 tint,同时保持平均值。

标签: java rgb


【解决方案1】:

我在几个程序中需要类似的东西 我做了。然而,我的解决方案是分别比较两个像素的 R G 和 B 值,找到相对于每个像素的 256 个最大值的差异百分比,然后根据我需要对信息做什么来平均或添加所有三个像素的差异。

但是我今天写的实现似乎有缺陷,并且由于某种原因总是返回 100% 的相似性。不过,我将分享这行代码,因为您可以了解它应该做什么。

public static int compareRGB(int rgb1, int rgb2){

    int[] rgb1Colors = new int[3];
    int[] rgb2Colors = new int[3];

    rgb1Colors[0] = getRed(rgb1);
    rgb1Colors[1] = getGreen(rgb1);
    rgb1Colors[2] = getRed(rgb1);

    rgb2Colors[0] = getRed(rgb2);
    rgb2Colors[1] = getGreen(rgb2);
    rgb2Colors[2] = getBlue(rgb2);

    return (100-(((Math.abs(rgb1Colors[0]-rgb2Colors[0])+Math.abs(rgb1Colors[1]-rgb2Colors[1])+Math.abs(rgb1Colors[2]-rgb2Colors[2]))/768)*100));
}

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 2018-01-20
    • 1970-01-01
    • 2016-03-31
    • 2011-04-27
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多