数字图像处理 JAVA 边缘检测 图像增强 图像分割 平滑 有界面 图像变换

  • a1_454920
    了解作者
  • 132KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-08 09:29
    上传日期
数字图像处理 JAVA 边缘检测 图像增强 图像分割 平滑 有界面 图像变换
数字图像处理 JAVA 边缘检测 图像增强 图像分割 平滑 有界面 图像变换.rar
内容介绍
package com.maomy.mainFrame; import java.awt.Color; import java.awt.Graphics; import java.awt.color.ColorSpace; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.awt.image.ColorConvertOp; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import com.maomy.utils.SmoothImage; public class MyImage extends JFrame{ //显示源图像的标签,并将其加入滚动条 JLabel jls=new JLabel(); JScrollPane jspz=new JScrollPane(jls); //显示目标图像的标签,并将其加入滚动条 JLabel jlt=new JLabel(); JScrollPane jspy=new JScrollPane(jlt); //分隔窗口,并将控件加入 JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy); //文件选择器 JFileChooser jfc=new JFileChooser("d:/法拉立"); //菜单栏,菜单以及菜单项 JMenuBar jmb=new JMenuBar(); JMenu jme=new JMenu("文件"); JMenuItem []jmit={new JMenuItem("打开图像"),new JMenuItem("清空图像"),new JMenuItem("退出操作"),}; //图像增强 JMenu jm=new JMenu("图像增强"); JMenuItem[]jmi={new JMenuItem("加强边缘"),new JMenuItem("锐化"),new JMenuItem("模糊"), new JMenuItem("浮雕"),new JMenuItem("灰度变换")}; //图像分割 JMenu jm2=new JMenu("图像分割 "); JMenuItem[]jmi2={new JMenuItem("边缘检测")}; //图像变换 JMenu jm3=new JMenu("图像变换 "); JMenuItem[]jmi3={new JMenuItem("图像平滑")}; //图像后退 JMenu jm4=new JMenu("图像后退 "); JMenuItem[]jmi4={new JMenuItem("后退")}; //创建不同的滤镜的卷积矩阵数组 float[][]data={ //加强边缘 {0f,-1f,0f,-1f,5f,-1f,0f,-1f,0f}, //锐化 {-0.125f,-0.125f,-0.125f, -0.125f,2f,-0.125f, -0.125f,-0.125f,-0.125f}, //模糊 {0.09375f,0.09375f,0.09375f, 0.09375f,0.25f,0.09375f, 0.09375f,0.09375f,0.09375f}, //浮雕 {2f,0f,2f, 0f,0f,0f, 2f,0f,-5f}, //边缘检测 {0.0f,-1.0f,0.0f,-1.0f,4.f,-1.0f,0.0f,-1.0f,0.0f} }; //定义一个图标 ImageIcon ii; public MyImage(){ super("图像处理示例"); this.setBounds(150,100, 1000, 500); //默认的布局为BorderLayout() //循环将菜单项添加进图像增强菜单,并为每个菜单项注册动作事件监听器 for(int i=0;i<jmi.length;i++) { jm.add(jmi[i]); if(i<4){ jmi[i].addActionListener(new Handler4()); } } jmi[4].addActionListener(new Handler5());//灰度处理 //循环将菜单项添加进图像增强菜单,并为每个菜单项注册动作事件监听器 for(int j=0;j<jmit.length;j++){ jme.add(jmit[j]); } jmit[0].addActionListener(new Handler1());//打开 jmit[1].addActionListener(new Handler2());//清空 jmit[2].addActionListener(new Handler3());//退出 //将图像分割菜单加入 jm2.add(jmi2[0]); // jm2.add(jmi2[1]); jmi2[0].addActionListener(new Handler6()); //将图像变换菜单加入 jm3.add(jmi3[0]); jmi3[0].addActionListener(new Handler7()); //后退监听器 jm4.add(jmi4[0]); jmi4[0].addActionListener(new Handler8()); //将菜单添加进菜单栏,并将菜单栏添加进窗体 jmb.add(jme); jmb.add(jm); jmb.add(jm2); jmb.add(jm3); jmb.add(jm4); this.setJMenuBar(jmb); //将分割窗格添加到窗体中 this.add(jsp); //关闭动作 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setResizable(true); } //********************************************************* //监听器 //加强边缘,锐化,模糊,浮雕监听器 class Handler4 implements ActionListener{ public void actionPerformed(ActionEvent e) { if(ii==null||ii.equals("")){ JOptionPane.showMessageDialog(null,"请先打开一幅图片!", "Alert",JOptionPane.WARNING_MESSAGE); } else for(int i=0;i<4;i++){ if(e.getSource()==jmi[i]){ //获取处理图像的高度和宽度 int width=ii.getImage().getWidth(null); int height=ii.getImage().getHeight(null); //创建两个BufferedImage对像分别用来放置待处理和处理后的图像 BufferedImage sb=new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB); BufferedImage tb=new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB); //将待处理图像绘制到源BufferedImage对像图像中 Graphics g=sb.getGraphics(); g.drawImage(ii.getImage(),0,0,Color.WHITE,null); //注:创建封装卷积矩阵的Kernel对像 Kernel k=new Kernel(3,3,data[i]); //注:创建对象并卷积处理 ConvolveOp co=new ConvolveOp(k,ConvolveOp.EDGE_NO_OP,null); co.filter(sb, tb); //获取处理后的图像并设置到目标标签中 jlt.setIcon(new ImageIcon(tb)); } } } } /********************************灰度处理方法******************************* * 获取处理后的图像对应的图标的方法 * */ class Handler5 implements ActionListener{ public void actionPerformed(ActionEvent e) { if(ii==null||ii.equals("")){ JOptionPane.showMessageDialog(null,"请先打开一幅图片!", "Alert",JOptionPane.WARNING_MESSAGE); } else{ //方法返回的是一个imageicon对象 ImageIcon myimage=processGrayImage(ii); //获取处理后的图像并设置到目标标签中 jlt.setIcon(myimage); } } public ImageIcon processGrayImage(ImageIcon source){ //获取图像的宽度与高度 int width=source.getImage().getWidth(null); int height=source.getImage().getHeight(null); //创建表示源图象的BufferedImage对象 BufferedImage sourceBuf=new BufferedImage( width,height,BufferedImage.TYPE_INT_ARGB); //创建表示处理后目标图象的BufferedImage对象 BufferedImage targetBuf=new BufferedImage( width,height,BufferedImage.TYPE_USHORT_GRAY); //获取表示源图象的BufferedImage对象的画笔 Graphics g=sourceBuf.getGraphics(); //将待处理的图像绘制到源BufferedImage对像中 g.drawImage(source.getImage(),0,0,Color.white,null); //创建用来进行灰度处理的ColorConvertOp对象 ColorConvertOp cco=new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB), ColorSpace.getInstance(ColorSpace.CS_GRAY),null); //进行灰度处理 cco.filter(sourceBuf,targetBuf); //返回处理后图像对应的图标对象 return new ImageIcon(targetBuf); } } //打开图像 class Handler1 implements ActionListener{ public void actionPerformed(ActionEvent e) { //加载选择的图片到图标对象中 ii=this.chooserFile(); //将图片设置到源标签中 jls.setIcon(ii); //设置两个标签的水平、垂直对齐方式 jls.setVerticalAlignment(JLabel.CENTER); jls.setHorizontalAlignment(JLabel.CENTER); jlt.setVerticalAlignment(JLabel.CENTER); jlt.setHorizontalAlignment(JLabel.CENTER); //将处理后的图片设置到目标标签中 jlt.setIcon(ii); //设置分隔条的宽度以及初始位置 jsp.setDividerLocation(500); jsp.setDividerSize(4); } /* * 加载选中图片的方法 * */ public ImageIcon chooserFile() { //弹出文件选择器 int i=jfc.showOpenDialog(null); //获取选择文件的路径 String dir=(jfc.getSelectedFile()!=null)?(jfc.getSelectedFile().getPath()):null; if(dir!=null&&!dir.equals("")) { //按指定的路径加载图片到图标对象中并返回 return new ImageIcon(dir); } return null; } } /******************************边缘检测************************************* * ********************** * ********************** * ********************** */ class Handler6 impleme
评论
    相关推荐
    • java图像处理
      java图像处理 类似photoshop,比他简单
    • Java图像处理
      Java图像处理
    • Java图像处理源码
      tiff拆分多页为多个单页,多页tiff格式拆分转png,合并图片 水印图片的处理
    • java 图像处理
      有上个文件,图像的缩放,图像的闪烁···学习java图像方面不错的资料··
    • java图像处理
      本打包资源可以在eclipse环境下运行,里面包含了常规图像处理的源代码和第三方jar包 以及安装说明,是采用java进行图像处理的很好的资源。
    • java图像处理
      java实现的图像处理,其中包括图像分割,图像变换,图像增强等算法。图像分割算法包括边缘检测和阈值分割
    • Java图像处理代码
      很实用的Java图像处理代码,包括图像半透明处理、图像合并、图像缩放、图像缩略图及图像暗化等,代码完整且可以直接拿来使用.
    • JAVA图像处理源码
      JAVA图像处理源码,实现对图像的识别与处理,勾勒出物体轮廓
    • java图像处理
      java实现基本的图像读入,和一些简单的图像处理功能
    • java图像处理
      java 图像处理代码,很实用 ,欢迎大家下载。有图像灰度变换、阈值变换、线性变换、伪彩色处理、图像融合、图像合成等等