图像处理作业.docx

上传人:b****0 文档编号:8979296 上传时间:2023-05-16 格式:DOCX 页数:30 大小:337.04KB
下载 相关 举报
图像处理作业.docx_第1页
第1页 / 共30页
图像处理作业.docx_第2页
第2页 / 共30页
图像处理作业.docx_第3页
第3页 / 共30页
图像处理作业.docx_第4页
第4页 / 共30页
图像处理作业.docx_第5页
第5页 / 共30页
图像处理作业.docx_第6页
第6页 / 共30页
图像处理作业.docx_第7页
第7页 / 共30页
图像处理作业.docx_第8页
第8页 / 共30页
图像处理作业.docx_第9页
第9页 / 共30页
图像处理作业.docx_第10页
第10页 / 共30页
图像处理作业.docx_第11页
第11页 / 共30页
图像处理作业.docx_第12页
第12页 / 共30页
图像处理作业.docx_第13页
第13页 / 共30页
图像处理作业.docx_第14页
第14页 / 共30页
图像处理作业.docx_第15页
第15页 / 共30页
图像处理作业.docx_第16页
第16页 / 共30页
图像处理作业.docx_第17页
第17页 / 共30页
图像处理作业.docx_第18页
第18页 / 共30页
图像处理作业.docx_第19页
第19页 / 共30页
图像处理作业.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

图像处理作业.docx

《图像处理作业.docx》由会员分享,可在线阅读,更多相关《图像处理作业.docx(30页珍藏版)》请在冰点文库上搜索。

图像处理作业.docx

图像处理作业

 

图像处理作业

 

一、题目:

编写程序对一个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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2