Java 使用RGB值比较两幅图像。(爪哇)

Java 使用RGB值比较两幅图像。(爪哇),java,image,filtering,rgb,Java,Image,Filtering,Rgb,我试图用它们的RGB值来比较两幅图像 下面的代码为未过滤和已过滤的对象提取相同的RGB值。我希望两个图像的值不同。(未过滤和已过滤是先前定义的)。其思想是,两幅图像之间的差异越大(过滤前后),过滤后的图像就越差 因此,我希望有两组不同的RGB值(1个用于未过滤,1个用于过滤)。我得到了两组RGB值,但是,它们都是相同的 我正在创建一个色盲模拟器,希望比较两者的值。下面是“正常”视觉图像和“色盲”视觉图像的示例 | 谢谢大家! Ed.您在这里所做的是对图像中心的一个像素进行颜色测量: Co

我试图用它们的RGB值来比较两幅图像

下面的代码为未过滤和已过滤的对象提取相同的RGB值。我希望两个图像的值不同。(未过滤和已过滤是先前定义的)。其思想是,两幅图像之间的差异越大(过滤前后),过滤后的图像就越差

因此,我希望有两组不同的RGB值(1个用于未过滤,1个用于过滤)。我得到了两组RGB值,但是,它们都是相同的

我正在创建一个色盲模拟器,希望比较两者的值。下面是“正常”视觉图像和“色盲”视觉图像的示例

|

谢谢大家!


Ed.

您在这里所做的是对图像中心的一个像素进行颜色测量:

Color unfilteredRGBValue = new Color(unfiltered.getRGB(ufwidth / 2, ufheight / 2))
如果我们查看javadoc的
getRGB()
方法,它会说

使用此方法时,返回数据中每个颜色分量的精度只有8位

我认为8位是一个非常小的精度,因为jpeg格式的标准RGB图像每像素有24位。可能两幅图像中的中间像素没有那么明显

编辑:正如Michael在下面提到的,这是每种颜色的精度,所以应该是高的。
无论如何,仅用一个像素来比较图像并不是一个好主意,最好是取一些显著数量的像素,然后计算它们的差异的平均值或平均值。

您的代码看起来很可疑

 filteredImage = unfilteredImage = Img; 
要正确阅读图像,我需要看到

BufferedImage bim1=null, bim2=null;
try {
  bim1=ImageIO.read(new File("c:/..../image1.png"));
  bim2=ImageIO.read(new File("c:/..../image2.png"));
}
catch (Exception ex) { ex.printStackTrace(); } 

你的问题是什么?当我运行代码时,我得到了过滤和未过滤图像的相同RGB值。我想知道是否有人知道为什么?编辑上面的问题,说明你预期会发生什么,以及实际发生的情况。我说这看起来可疑filteredImage=unfilteredImage=Img;-要正确读取图像,我需要看到BuffereImage bim=null;尝试{bim=ImageIO.read(新文件(“c:/…../image.png”);}catch(异常ex){System.err.println(“bim中的错误”);ex.printStackTrace();}看看@gpasch说了什么。尝试一些
System.out.println(filtered==unfiltered)。如果打印的是
true
,那么:这是您的问题;-)我还以为你修好了呢!:-(但我很确定它只是使用了原始图像的RGB值,我使用了许多图像,完全相同。我希望能够显示所有代码,因为这是一个相当大的项目。8位。)
int GetType()
{
    int type = 0;
    for (int i=0; i<numberOfTypes; i++)
    {
        JToggleButton TypeButton = TypeButtons[i];
        if (TypeButton.isSelected()) type = i;
    }

    TypeListener.SetType(type);
    return type;
}
        BufferedImage unfiltered = unfilteredImage;
        BufferedImage filtered = filteredImage;

        //unfilteredImage
        int ufwidth = unfiltered.getWidth();
        int ufheight = unfiltered.getHeight();

        Color unfilteredRGBValue = new Color(unfiltered.getRGB(ufwidth / 2, ufheight / 2));

        int ufred = unfilteredRGBValue.getRed();
        int ufgreen = unfilteredRGBValue.getGreen();
        int ufblue = unfilteredRGBValue.getBlue();

        System.out.println("Unfiltered Red: " + ufred);
        System.out.println("Unfiltered Green: " + ufgreen);
        System.out.println("Unfiltered Blue: " + ufblue);

        System.out.println("Unfiltered Score: " + ufred + ufgreen + ufblue);

        //filteredImage
        int fwidth = filtered.getWidth();
        int fheight = filtered.getHeight();

        Color filteredRGBValue = new Color(filtered.getRGB(fwidth / 2, fheight / 2));

        int fred = filteredRGBValue.getRed();
        int fgreen = filteredRGBValue.getGreen();
        int fblue = filteredRGBValue.getBlue();

        System.out.println("Filtered Red: " + fred);
        System.out.println("Filtered Green: " + fgreen);
        System.out.println("Filtered Blue: " + fblue);

        System.out.println("Filtered Score: " + fred + fgreen + fblue);
Color unfilteredRGBValue = new Color(unfiltered.getRGB(ufwidth / 2, ufheight / 2))
 filteredImage = unfilteredImage = Img; 
BufferedImage bim1=null, bim2=null;
try {
  bim1=ImageIO.read(new File("c:/..../image1.png"));
  bim2=ImageIO.read(new File("c:/..../image2.png"));
}
catch (Exception ex) { ex.printStackTrace(); }