首页 > 解决方案 > 比较 RGB 值

问题描述

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

示例比例:

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

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

标签: javargb

解决方案


在我制作的几个程序中,我需要类似的东西。然而,我的解决方案是分别比较两个像素的 RG 和 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));
}

推荐阅读