【发布时间】:2017-01-11 09:40:25
【问题描述】:
我正在尝试用 java 编写一个 sobel 边缘检测程序。但我得到了奇怪的输出。帮助。这是我的程序。
import java.io.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.Scanner;
import java.lang.Math;
public class sobeltest
{
public static void main(String args[]) throws IOException{
System.out.println("Enter the file name :");
Scanner ne1=new Scanner(System.in);
String filename=ne1.nextLine();
File file= new File(filename);
BufferedImage image = ImageIO.read(file);
int x=image.getWidth();
int y=image.getHeight();
for(int i=1;i<x-1;i++)
{
for(int j=1;j<y-1;j++)
{
int val00=image.getRGB(i-1,j-1);
int val01=image.getRGB(i-1,j);
int val02=image.getRGB(i-1,j+1);
int val10=image.getRGB(i,j-1);
int val11=image.getRGB(i,j);
int val12=image.getRGB(i,j+1);
int val20=image.getRGB(i+1,j-1);
int val21=image.getRGB(i+1,j);
int val22=image.getRGB(i+1,j+1);
int gx=(((-1*val00)+(0*val01)+(1*val02))+((-2*val10)+(0*val11)+(2*val12))+((-1*val20)+(0*val21)+(1*val22)));
int gy=(((-1*val00)+(-2*val01)+(-1*val02))+((0*val10)+(0*val11)+(0*val12))+((1*val20)+(2*val21)+(1*val22)));
double gval=Math.sqrt((gx*gx)+(gy*gy));
int g=(int)gval;
image.setRGB(i,j,g);
}
}
File outputfile = new File("sobel.png");
ImageIO.write(image, "png", outputfile);
}
}
.......................
【问题讨论】:
-
仅作记录:您不会来这里订购/要求“提供有效的解决方案”。你试着问一个好问题;然后我们看看我们做了什么。但这很少意味着有人会放弃一个可行的解决方案!从这个意义上说:简单地避免这样的陈述;他们可以过来一点...粗鲁...
-
提示:您仍然可以编辑您的问题 ;-)
-
收到消息,完成。