【发布时间】:2016-01-27 00:03:47
【问题描述】:
我正在尝试使用它们的 RGB 值比较两个图像。
下面的代码为未过滤和过滤的 RGB 值提取相同的 RGB 值。我希望两个图像的值不同。 (未过滤和过滤是先前定义的)。这个想法是,两个图像之间的差异(过滤前后)越大,过滤后的图像就越差。
作为我的结果,我希望有两组不同的 RGB 值(1 组用于未过滤,1 组用于过滤)。我得到了两组 RGB 值,但是,它们都是相同的。
我正在创建一个色盲模拟器,并想比较两者的值。下面是“正常”视觉图像和“色盲”视觉图像的示例。
Unfiltered Image | Filtered Image
filteredImage = unfilteredImage = Img;
...
ImageDisplay = new JLabel(new ImageIcon(filteredImage));
...
private void TypeButtonPressed()
{
filteredImage(GetType());
}
...
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);
谢谢!
编。
【问题讨论】:
-
你的问题是什么?
-
当我运行代码时,我得到过滤和未过滤图像的相同 RGB 值。我想知道是否有人能明白为什么?
-
在上面编辑您的问题,指定您预期会发生什么,以及实际发生了什么
-
正如我所说,这看起来很可疑- 要正确读取图像,我需要查看 BufferedImage bim=null;试试 { bim=ImageIO.read(new File("c:/..../image.png")); } catch (Exception ex) { System.err.println("bim 中的错误"); ex.printStackTrace(); }
-
@gpasch 说了什么。试试
System.out.println(filtered==unfiltered);。如果这打印true,那么:这是你的问题;-)