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