图像处理作业.docx
- 文档编号:8979296
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:30
- 大小:337.04KB
图像处理作业.docx
《图像处理作业.docx》由会员分享,可在线阅读,更多相关《图像处理作业.docx(30页珍藏版)》请在冰点文库上搜索。
图像处理作业
图像处理作业
一、题目:
编写程序对一个bmp图像统计直方图,并进行均衡化处理。
二、程序完成情况:
(一)、简介
本程序采用java语言编写,在BorlandJBuilderX下编译通过。
由于本人在软件编程方面并不擅长,且java语言学习时间不长,程序内一定会有很多不合适的语句。
谢谢老师在百忙之中批改我的作业!
(二)程序界面
1、主界面
2、选择文件
3、打开
4、统计直方图
5、均衡化处理
6、处理后的直方图
三、源程序
Frame1.java
packagecl.lesson.txcl;
importjava.io.*;
importjava.awt.*;
importjava.awt.Toolkit;
importjava.awt.image.*;
import.*;
import.MalformedURLException;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.filechooser.FileFilter;
importjava.awt.Image;
importjava.awt.Toolkit;
importjava.awt.image.BufferedImage;
importjava.awt.image.MemoryImageSource;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
//java包调用
/**
*
Title:
*
Description:
*
Copyright:
Copyright(c)2004
*
Company:
*@陈磊
*@version1.0
*/
//文件信息
publicclassFrame1extendsJFrame{
JPanelcontentPane;
JMenuBarjMenuBar1=newJMenuBar();
JMenujMenuFile=newJMenu();
JMenuItemjMenuFileExit=newJMenuItem();
JMenujMenuHelp=newJMenu();
JMenuItemjMenuHelpAbout=newJMenuItem();
JToolBarjToolBar=newJToolBar();
JButtonjButton1=newJButton();
JButtonjButton2=newJButton();
JButtonjButton3=newJButton();
ImageIconimage1;
ImageIconimage2;
ImageIconimage3;
BorderLayoutborderLayout1=newBorderLayout();
JTabbedPanejTabbedPane1=newJTabbedPane();
Toolkittk;
MediaTrackermtrack;
Imageimg;
intImageWidth;
intImageHeight;//分别为图像的宽度与高度值
intPixelsSource;//ImageWidth*ImageHeigh
StringtheFile;
StringtheDir;
ThreadrunMe;
JMenuItemjMenuFileOpen=newJMenuItem();
JMenuItemjMenuSave=newJMenuItem();
JMenujMenuPlay=newJMenu();
JMenuItemjMenuItem1=newJMenuItem();
JMenuItemjMenuItem2=newJMenuItem();
//Constructtheframe
publicFrame1(){
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try{
jbInit();
}
catch(Exceptione){
e.printStackTrace();
}
}
//Componentinitialization
privatevoidjbInit()throwsException{
image1=newImageIcon(cl.lesson.txcl.Frame1.class.getResource("openFile.png"));
image2=newImageIcon(cl.lesson.txcl.Frame1.class.getResource("closeFile.png"));
image3=newImageIcon(cl.lesson.txcl.Frame1.class.getResource("help.png"));
contentPane=(JPanel)this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(newDimension(533,409));
this.setTitle("图象处理");
jMenuFile.setText("文件");
jMenuFileExit.setText("离开");
jMenuFileExit.addActionListener(newFrame1_jMenuFileExit_ActionAdapter(this));
jMenuHelp.setToolTipText("");
jMenuHelp.setText("帮助");
jMenuHelpAbout.setText("关于");
jMenuHelpAbout.addActionListener(newFrame1_jMenuHelpAbout_ActionAdapter(this));
jButton1.setIcon(image1);
jButton1.addActionListener(newFrame1_jButton1_actionAdapter(this));
jButton1.setToolTipText("打开文件");
jButton2.setIcon(image2);
jButton2.setToolTipText("存储文件");
jButton3.setIcon(image3);
jButton3.addActionListener(newFrame1_jButton3_actionAdapter(this));
jButton3.setToolTipText("帮助");
contentPane.setAlignmentY((float)0.5);
contentPane.setDebugGraphicsOptions(0);
contentPane.setToolTipText("");
jMenuFileOpen.setToolTipText("");
jMenuFileOpen.setText("打开");
jMenuFileOpen.addActionListener(newFrame1_jMenuFileOpen_actionAdapter(this));
jMenuSave.setText("存储");
jMenuSave.addActionListener(newFrame1_jMenuSave_actionAdapter(this));
jMenuPlay.setText("图像处理");
jMenuItem1.setText("绘制直方图");
jMenuItem1.addActionListener(newFrame1_jMenuItem1_actionAdapter(this));
jMenuItem2.setText("均衡化处理");
jMenuItem2.addActionListener(newFrame1_jMenuItem2_actionAdapter(this));
jToolBar.add(jButton1);
jToolBar.add(jButton2);
jToolBar.add(jButton3);
contentPane.add(jTabbedPane1,BorderLayout.CENTER);
jMenuFile.add(jMenuFileOpen);
jMenuFile.add(jMenuSave);
jMenuFile.add(jMenuFileExit);
jMenuHelp.add(jMenuHelpAbout);
jMenuBar1.add(jMenuFile);
jMenuBar1.add(jMenuPlay);
jMenuBar1.add(jMenuHelp);
this.setJMenuBar(jMenuBar1);
contentPane.add(jToolBar,BorderLayout.NORTH);
jMenuPlay.add(jMenuItem1);
jMenuPlay.add(jMenuItem2);
}
//File|Exitactionperformed
publicvoidjMenuFileExit_actionPerformed(ActionEvente){
System.exit(0);
}
//Help|Aboutactionperformed
publicvoidjMenuHelpAbout_actionPerformed(ActionEvente){
Frame1_AboutBoxdlg=newFrame1_AboutBox(this);
DimensiondlgSize=dlg.getPreferredSize();
DimensionfrmSize=getSize();
Pointloc=getLocation();
dlg.setLocation((frmSize.width-dlgSize.width)/2+loc.x,(frmSize.height-dlgSize.height)/2+loc.y);
dlg.setModal(true);
dlg.pack();
dlg.show();
}
//菜单说明帮助项
//Overriddensowecanexitwhenwindowisclosed
protectedvoidprocessWindowEvent(WindowEvente){
super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING){
jMenuFileExit_actionPerformed(null);
}
}
//菜单关闭项
voidjButton3_actionPerformed(ActionEvente){
Frame1_AboutBoxdlg=newFrame1_AboutBox(this);
DimensiondlgSize=dlg.getPreferredSize();
DimensionfrmSize=getSize();
Pointloc=getLocation();
dlg.setLocation((frmSize.width-dlgSize.width)/2+loc.x,(frmSize.height-dlgSize.height)/2+loc.y);
dlg.setModal(true);
dlg.pack();
dlg.show();
}
//快捷图标帮助
publicvoidgetImageFromFile(Stringpath)
{
tk=Toolkit.getDefaultToolkit();
img=tk.getImage(path);
}
//以下为主要内容,选择打开一个bmp图像文件,并对其分析读取。
voidjButton1_actionPerformed(ActionEvente){
Imageimage;//构造一个目标图
Stringresult="";//返回结果
FileDialogfd=newFileDialog(this,"请选择一个bmp图像文件!
");
fd.setMode(FileDialog.LOAD);
fd.setVisible(true);
theFile=fd.getFile();
theDir=fd.getDirectory();
StringthePath=theDir+theFile;
FileInputStreamfs=newFileInputStream(thePath);
intbflen=14;
bytebf[]=newbyte[bflen];
fs.read(bf,0,bflen);//读取14字节BMP文件头
intbilen=40;
bytebi[]=newbyte[bilen];
fs.read(bi,0,bilen);//读取40字节BMP信息头
//获取一些重要数据
intnwidth=(((int)bi[7]&0xff)<<24)//源图宽度
|(((int)bi[6]&0xff)<<16)
|(((int)bi[5]&0xff)<<8)
|(int)bi[4]&0xff;
System.out.println("宽:
"+nwidth);
intnheight=(((int)bi[11]&0xff)<<24)//源图高度
|(((int)bi[10]&0xff)<<16)
|(((int)bi[9]&0xff)<<8)
|(int)bi[8]&0xff;
System.out.println("高:
"+nheight);
//位数
intnbitcount=(((int)bi[15]&0xff)<<8)|(int)bi[14]&0xff;
System.out.println("位数:
"+nbitcount);
//源图大小
intnsizeimage=(((int)bi[23]&0xff)<<24)
|(((int)bi[22]&0xff)<<16)
|(((int)bi[21]&0xff)<<8)
|(int)bi[20]&0xff;
System.out.println("源图大小:
"+nsizeimage);
//对24位BMP进行解析
if(nbitcount==24){
intnpad=(nsizeimage/nheight)-nwidth*3;
intndata[]=newint[nheight*nwidth];
bytebrgb[]=newbyte[(nwidth+npad)*3*nheight];
fs.read(brgb,0,(nwidth+npad)*3*nheight);
intnindex=0;
for(intj=0;j for(inti=0;i ndata[nwidth*(nheight-j-1)+i]= (255&0xff)<<24 |(((int)brgb[nindex+2]&0xff)<<16) |(((int)brgb[nindex+1]&0xff)<<8) |(int)brgb[nindex]&0xff; nindex+=3; } nindex+=npad; } Toolkitkit=Toolkit.getDefaultToolkit(); image=kit.createImage(newMemoryImageSource(nwidth,nheight, ndata,0,nwidth)); result="从BMP得到图像image"; System.out.println("从BMP得到图像image"); }else{ result="不是24位BMP,失败! "; System.out.println("不是24位BMP,失败! "); image=(Image)null; } fs.close();//关闭输入流 } //因为同时有菜单项和快捷图标,所以以下模块内容和上面这个模块一样。 下面是菜单项打//开。 voidjMenuFileOpen_actionPerformed(ActionEvente){ Imageimage;//构造一个目标图 Stringresult="";//返回结果 FileDialogfd=newFileDialog(this,"请选择一个bmp图像文件! "); fd.setMode(FileDialog.LOAD); fd.setVisible(true); theFile=fd.getFile(); theDir=fd.getDirectory(); StringthePath=theDir+theFile; FileInputStreamfs=newFileInputStream(thePath); intbflen=14; bytebf[]=newbyte[bflen]; fs.read(bf,0,bflen);//读取14字节BMP文件头 intbilen=40; bytebi[]=newbyte[bilen]; fs.read(bi,0,bilen);//读取40字节BMP信息头 //获取一些重要数据 intnwidth=(((int)bi[7]&0xff)<<24)//源图宽度 |(((int)bi[6]&0xff)<<16) |(((int)bi[5]&0xff)<<8) |(int)bi[4]&0xff; System.out.println("宽: "+nwidth); intnheight=(((int)bi[11]&0xff)<<24)//源图高度 |(((int)bi[10]&0xff)<<16) |(((int)bi[9]&0xff)<<8) |(int)bi[8]&0xff; System.out.println("高: "+nheight); //位数 intnbitcount=(((int)bi[15]&0xff)<<8)|(int)bi[14]&0xff; System.out.println("位数: "+nbitcount); //源图大小 intnsizeimage=(((int)bi[23]&0xff)<<24) |(((int)bi[22]&0xff)<<16) |(((int)bi[21]&0xff)<<8) |(int)bi[20]&0xff; System.out.println("源图大小: "+nsizeimage); //对24位BMP进行解析 if(nbitcount==24){ intnpad=(nsizeimage/nheight)-nwidth*3; intndata[]=newint[nheight*nwidth]; bytebrgb[]=newbyte[(nwidth+npad)*3*nheight]; fs.read(brgb,0,(nwidth+npad)*3*nheight); intnindex=0; for(intj=0;j for(inti=0;i ndata[nwidth*(nheight-j-1)+i]= (255&0xff)<<24 |(((int)brgb[nindex+2]&0xff)<<16) |(((int)brgb[nindex+1]&0xff)<<8) |(int)brgb[nindex]&0xff; nindex+=3; } nindex+=npad; } Toolkitkit=Toolkit.getDefaultToolkit(); image=kit.createImage(newMemoryImageSource(nwidth,nheight, ndata,0,nwidth)); result="从BMP得到图像image"; System.out.println("从BMP得到图像image"); }else{ result="不是24位BMP,失败! "; System.out.println("不是24位BMP,失败! "); image=(Image)null; } fs.close();//关闭输入流 } //从Panel存储图像 voidjMenuSave_actionPerformed(ActionEvente){ Imageimage;//构造一个目标图 intwideth=image.getWidth(null);//得到源图宽 intheight=image.getHeight(null);//得到源图长 FileoutFile=newFile(theDir,(theFile+".bmp")); BufferedImagetag=newBufferedImage(wideth,height,BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(image,0,0,wideth,height,null);//绘制图 BufferedImagetag=newjTabbedPane1.createImage(wideth,height); Graphics2Dg2=image.createGraphics(); jTabbedPane1.print(g2); BufferedOutputStreambos=newBufferedOutputStream(newFileOu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 作业