【发布时间】:2017-05-14 14:20:25
【问题描述】:
我已经实现了 blur 算法。我不明白 为什么 它会产生 蓝色 虽然原始图像是 not 蓝色。我认为问题出在此处(总和所有颜色) 整数总和 = (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9)/9; 请帮我。我的代码有问题吗?
public class BlurImageDemo1 {
BlurImageDemo1() throws IOException, InterruptedException {
File f = new File("D:\\mk.jpg");
BufferedImage im = ImageIO.read(f);
for (int x = 1; x < im.getHeight() - 2; x++) {
for (int y = 1; y < im.getWidth() - 2; y++) {
Color p1 = new Color(im.getRGB(y - 1, x-1));
int s1=p1.getRed()+p1.getGreen()+p1.getBlue() ;
Color p2 = new Color(im.getRGB(y, x - 1));
int s2=p2.getRed()+p2.getGreen()+p2.getBlue() ;
Color p3 = new Color(im.getRGB(y + 1, x - 1));
int s3=p3.getRed()+p3.getGreen()+p3.getBlue() ;
Color p4 = new Color(im.getRGB(y - 1, x));
int s4=p4.getRed()+p4.getGreen()+p4.getBlue() ;
Color p5 = new Color(im.getRGB(y, x));
int s5=p5.getRed()+p5.getGreen()+p5.getBlue();
Color p6 = new Color(im.getRGB(y + 1, x));
int s6=p6.getRed()+p6.getGreen()+p6.getBlue() ;
Color p7 = new Color(im.getRGB(y - 1, x + 1));
int s7=p7.getRed()+p7.getGreen()+p7.getBlue() ;
Color p8 = new Color(im.getRGB(y, x + 1));
int s8=p8.getRed()+p8.getGreen()+p8.getBlue() ;
Color p9 = new Color(im.getRGB(y + 1, x + 1));
int s9=p9.getRed()+p9.getGreen()+p9.getBlue() ;
int sum = (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9)/9;
System.out.println(sum);
im.setRGB(y, x,sum);
}
//System.out.println();
}
ImageIO.write(im, "jpg", new File("D:\\MK1.jpg"));
}
public static void main(String[] args) throws IOException, InterruptedException {
new BlurImageDemo1();
}
}
【问题讨论】:
-
你为什么要对频道求和?
-
我不明白。你看到原图了吗。没有蓝色。怎么可能。请解释
-
嗯,我觉得这个问题有点神秘,因为它看起来是故意的。您将红色绿色和蓝色相加,导致亮度混合严重,您将其模糊,然后您假装亮度是 RGB,但事实并非如此,但当然大部分亮度是最低 8 位 - 所以蓝色.
-
我只是学习图像处理。我对颜色混合没有很好的理解。我没有假装什么。如果你能帮助我,那就太好了。
-
你能帮我改正代码吗?