C#试验报告-图像处理_第1页
C#试验报告-图像处理_第2页
C#试验报告-图像处理_第3页
C#试验报告-图像处理_第4页
C#试验报告-图像处理_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西华大学实验报告(理工类)开课学院及实验室:实验时间:2016年11月2日学生姓名魏俊旭学号3120140802334成绩学生所在学院电气与电子信息学院年级/专业/班2014/信息工程/3班课程名称实用程序设计与实例分析课程代码实验项目名称实验五:图形图像和多媒体编程练习项目代码指导教师郭奕项目学分、实验目的1、掌握使用GDI+来进行绘图的方法。2、掌握直接使用GDI+进行数据图形展示的方法。3、会使用C#S行简单的图像处理。4、在C#中可以使用几种控件进行声音或者视频的播放。5、了解DirectX是微软开发的多媒体应用程序接口(API)。二、实验原理1、GDI(GraphicsDeviceInterface,图形设备接口)主要用于在windows平台上编写图形程序,从程序设计的角度看,GDI包才GDI对象和GDI函数两部分。2、Graphics类封装了一个GDI+绘图图面,提供将对象绘制到显示设备的方法,Graphics与特定的设备上下文关联,画图方法都被包括在Graphics类中。3、GDI+(GraphicsDeviceInterfacePlus,图形设备接口)提供了各种丰富的图形图像处理功能。4、在C#中进行图像处理一般都是通过Image类及其派生类来实现的。Image类封装了对BMPGIF、JPGEXIF、PNGTIFF和ICON图像文件的调入、格式转换以及简单的处理功能。5、Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成。6、GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色。7、在C#中可以使用Soundplayer类播放wav声音,使用WindowsAPI播放MP3,使用WindowsMediaPlayer控件播放音频或视频,使用ShockWaveFlash控件播放Flash文件。8、在C#中,可以引用Windows自带的WindowsMediaPlayer组件播放多种格式的音频文件和视频文件,所支持的音频文件和视频文件格式由电脑系统安装的解码器决定。三、实验设备、仪器及材料Windows环境计算机、VisualStudio2012软件四、实验步骤(按照实际操作过程)

(一)图像处理程序1、要求:利用C#创建一个如图1所示的图像处理程序,对图像进行底片效果、浮雕效果和黑白效果的变换显示。图12、具体的实现步骤参考教材132页案例5-4.(二)媒体播放程序设计1、要求:利用WindowsMediaPlayer组建实现一个如图2所示的多媒体播放器。2、具体的实现步骤参考教材139页案例5-5.五、实验过程记录(数据、图表、计算等)

实验1定义打开按钮打开图片选择privatevoidbutton1Click1(objectsender,EventArgse)(DialogResultdr=openFileDialog1.ShowDialog();if(dr==DialogResult.OK)//如果用户选择了打开{stringfileName=this.openFileDialog1.FileName;//获取选择的文件//下面进行你所要进行的操作吧foreach(Controlcontrolinthis.Controls)PictureBox)control).SizeMode=PictureBoxSizeMode.StretchImage;if(controlisPictureBox){PictureBox)control).SizeMode=PictureBoxSizeMode.StretchImage;((((((PictureBox)control).Image=Image.FromFile(fileName);}窗体加载时调用openFileDialog1对象的方法初始化privatevoidForm1Load(objectsender,EventArgse){openFileDialog1.FileName="";//初始文件名为空//openFileDialog1.Filter="文本文件|**|C#文件|*cs|所有文件|**";//筛选选择文件的类型openFileDialog1.RestoreDirectory=true;//在对话框关闭前还原当前目录openFileDialog1.FilterIndex=1;//默认选择文件类型的索引为1}底片效果处理方法privatevoidbutton1Click(objectsender,EventArgse){//以底片效果显示图像try{intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;Bitmapnewbitmap=newBitmap(Width,Height);Bitmapoldbitmap=(Bitmap)this.pictureBox1.Image;Colorpixel;for(intx=1;x<Width;x++)(for(inty=1;y<Height;y++)(intr,g,b;pixel=oldbitmap.GetPixel(x,y);r=255-pixel.R;g=255-pixel.G;b=255-pixel.B;newbitmap.SetPixel(x,y,Color.FromArgb(r,g,b));}}this.pictureBox2.Image=newbitmap;}catch(Exceptionex)(MessageBoxIcon.Information);MessageBoxShow(ex.Message,"信息提示",MessageBoxButtons.OK,}MessageBoxIcon.Information);}浮雕效果privatevoidbutton2Click(objectsender,EventArgse)(//以浮雕效果显示图像try(intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;Colorpixel1,pixel2;for(intx=0;x<Width-1;x++){for(inty=0;y<Height-1;y++){intr=0,g=0,b=0;pixel1=oldBitmap.GetPixel(x,y);pixel2=oldBitmap.GetPixel(x+1,y+1);r=Math.Abs(pixel1.R-pixel2.R+128);g=Math.Abs(pixel1.G-pixel2.G+128);b=Math.Abs(pixel1.B-pixel2.B+128);if(r>255)r=255;if(r<0)r=0;if(g>255)g=255;if(g<0)g=o;if(b>255)b=255;if(b<0)b=0;newBitmap.SetPixel(x,y,Color.FromArgb(r,g,b));))this.pictureBox2.Image=newBitmap;MessageBoxShow(ex.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);))黑白效果(灰度图片)privatevoidbutton3Click(objectsender,EventArgse){//以黑白效果显示图像try{intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;Colorpixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++){pixel=oldBitmap.GetPixel(x,y);intr,g,b,Result=0;r=pixel.R;g=pixel.G;b=pixel.B;Result=((int)(0.299*r)+(int)(0.587*g)+(int)(0.114*b));newBitmap.SetPixel(x,y,Color.FromArgb(Result,Result,Result));)this.pictureBox2.Image=newBitmap;}catch(Exceptionex)(MessageBoxShow(ex.Message,"信息提示");))基于暗通道优先的图像去雾算法算法原理对于任何图片,其暗通道可以定义为产心二图eL既/⑶)卜首先:在计算机益党和计算机因形中:下述方程,所描述的雾图格或稹至笠广泛使用:+另[1-K行卜其中,『CO就是现在已经有的耋像,即待去雾的回缴,“公是要佚宸的无雾的青像,参数A是全球大气光成分,K6为透射率*现在的已知条件就是火力,要求目标面根据基本的代数知识可知这一个育无数解的方程.只有在一些先整信息基砒上才能求出定罪"这货是透射率f00的预先值.中考廖到当选射图工的值很小时,会导致j的值偏大:从而史至獴夏律向白扬过度:因此一般可以设置一个廨值%,当E值小于。时,令土=%,后续的示例程序均采用%=51为标在计算.因此.最姿的酎像恢复公式如下fQ..「⑺-A/⑺―氏]+'代码privatevoidbutton4Click(objectsender,EventArgse)//基于暗通道优先的图像去雾算法//计算图像的暗像素点intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;Colorcdarkpixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++)(cdarkpixel=oldBitmap.GetPixel(x,y);intResult=0;Result=(int)(cdarkpixel.R>cdarkpixel.G?cdarkpixel.G>cdarkpixel.Bcdarkpixel.B:cdarkpixel.G:cdarkpixel.R>cdarkpixel.B?cdarkpixel.B:cdarkpixel.R);newBitmap.SetPixel(x,y,Color.FromArgb(Result,Result,Result));}//计算图像的高斯模糊之后的暗通道inti,j;Colorc1=newColor();Colorc2=neWColor();Colorc3=neWColor();Colorc4=neWColor();Colorc5=neWColor();Colorc6=neWColor();Colorc7=neWColor();Colorc8=neWColor();Colorc9=neWColor();Colorcc=neWColor();for(i=1;i<=pictureBox1.Image.Width-2;i++)(for(j=1;j<=pictureBox1.Image.Height-2;j++)|(c1=01dBitmap.GetPixel(i,j-1);c2=01dBitmap.GetPixel(i-1,j);c3=oldBitmap.GetPixel(i,j);c4=oldBitmap.GetPixel(i+1,j);c5=oldBitmap.GetPixel(i,j+1);c6=01dBitmap.GetPixel(i-1,j-1);c7=01dBitmap.GetPixel(i-1,j+1);c8=oldBitmap.GetPixel(i+1,j-1);c9=oldBitmap.GetPixel(i+1,j+1);int[]temp=newint[]{c1.R,c2.R,c3.R,c4.R,c5.R,c6.R,c7.R,c8.R,c9.R};intming=min(temp,9);cc=Color.FromArgb(255-ming,255-ming,255-ming);newBitmap.SetPixel(i,j,cc);}}//计算大气折射率AintX=0,丫=0,tem=0;ColorcApixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++)(cApixel=newBitmap.GetPixel(x,y);intiValue=cApixel.R;if(iValue>tem)(}ColorcAcolor=01dBitmap.GetPixel(X,Y);intcARed=cAcolor.R;intcAGreen=cAcolor.G;intcABlue=cAcolor.B;ColorcoApixel;double[,]dt=newdouble[Width,Height];//计算透射系数tfor(intx=0;x<Width;x++)for(inty=0;y<Height;y++)(coApixel=newBitmap.GetPixel(x,y);intg=coApixel.R;dt[x,y]=1-(0.95*(((double)g/tem)));if(dt[x,y]<0.58)dt[x,y]=0.58;}//去雾算法Colorcrepixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++)crepixel=oldBitmap.GetPixel(x,y);intiReRed=((int)((crepixel.R-cARed)/dt[x,y]))+cARed;intiReGreen=(int)((crepixel.G-cAGreen)/dt[x,y])+cAGreen;intiReBlue=(int)((crepixel.B-cABlue)/dt[x,y])+cABlue;if(iReRed>255)iReRed=255;if(iReGreen>255)iReGreen=255;if(iReBlue>255)iReBlue=255;if(iReRed<0)newBitmap.SetPixel(x,y,Color.FromArgb(iReRed,iReGreen,iReBlue));)this.pictureBox2.Image=newBitmap;)catch(Exceptionex){MessageBoxShow(ex.Message,"信息提示");))高斯滤波算法原理,席斯分布privatevoidgaussianClick(objectsender,EventArgse)//高斯滤波Colorc1=newColor();Colorc2=newColor();Colorc3=newColor();Colorc4=newColor();Colorc5=newColor();Colorc6=newColor();Colorc7=newColor();Colorc8=newColor();Colorc9=newColor();intHeight=this.pictureBoxl.Image.Height;intWidth=this.pictureBox1.Image.Width;_|BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=newBitmap(this.pictureBox1.Image);intrr,r1,r2,r3,r4,r5,r6,r7,r8,r9,i,j,fxr,fxg,fxb,gg,bb;for(i=1;i<=pictureBox1.Image.Width-2;i++){for(j=1;j<=pictureBox1.Image.Height-2;j++){c1=01dBitmap.GetPixel(i,j-1);c2=01dBitmap.GetPixel(i-1,j);c3=01dBitmap.GetPixel(i,j);c4=01dBitmap.GetPixel(i+1,j);c5=01dBitmap.GetPixel(i,j+1);c6=01dBitmap.GetPixe1(i-1,j-1);c7=01dBitmap.GetPixe1(i-1,j+1);c8=01dBitmap.GetPixe1(i+1,j-1);c9=01dBitmap.GetPixe1(i+1,j+1);r1=c1.R;r2=c2.R;r3=c3.R;r4=c4.R;|r5=c5.R;|r6=c6.R;r7=c7.R;r8=c8.R;r9=c9.R;fxr=(r6+r7+r8+r9+2*r1+2*r2+2*r4+2*r5+4*r3)/16;rr=fxr;c1=01dBitmap.GetPixe1(i,j-1);c2=01dBitmap.GetPixe1(i-1,j);c3=01dBitmap.GetPixe1(i,j);c4=01dBitmap.GetPixe1(i+1,j);c5=01dBitmap.GetPixe1(i,j+1);c6=01dBitmap.GetPixe1(i-1,j-1);c7=01dBitmap.GetPixe1(i-1,j+1);c8=01dBitmap.GetPixe1(i+1,j-1);c9=01dBitmap.GetPixe1(i+1,j+1);r1=c1.G;r2=c2.G;r3=c3.G;r4=c4.G;r5=c5.G;r6=c6.G;r7=c7.G;r8=c8.G;r9=c9.G;fxg=(r6+r7+r8+r9+2*ri+2*r2+2*r4+2*r5+4*r3)/16;gg=fxg;ci=oldBitmap.GetPixel(i,j-1);c2=oldBitmap.GetPixel(i-1,j);c3=oldBitmap.GetPixel(i,j);c4=oldBitmap.GetPixel(i+1,j);c5=01dBitmap.GetPixel(i,j+1);c6=oldBitmap.GetPixel(i-1,j-1);c7=oldBitmap.GetPixel(i-1,j+1);c8=oldBitmap.GetPixel(i+1,j-1);c9=oldBitmap.GetPixel(i+1,j+1);r1=c1.B;r2=c2.B;r3=c3.B;r4=c4.B;r5=c5.B;r6=c6.B;r7=c7.B;r8=c8.B;r9=c9.B;fxb=(r6+r7+r8+r9+2*ri+2*r2+2*r4+2*r5+4*r3)/16;bb=fxb;Colorcc=Color.FromArgb(rr,gg,bb);newBitmap.SetPixel(i,j,cc);))this.pictureBox2.Image=newBitmap;

图1底片效果图2浮雕效果图3灰度图片

图4图像去雾图4图像去雾图5高斯滤波(高斯噪声图由Matlab产生,方差为0.2,均值为0.6)实验二定义类来封装属性classPlayitem(///<summary>///节目素材的名称///</summary>stringprogramName;publicstringProgramName(get{returnprogramName;}set{programName=value;}}///<summary>〃/节目素材的全路径///</summary>stringprogramFullPath;publicstringProgramFullPath(get{returnprogramFullPath;}set{programFullPath=value;}}///<summary>///用毫秒表示的素材长度///</summary>doubleprogramLengthInMS;publicdoubleProgramLengthInMS{get{returnprogramLengthInMS;}set{programLengthInMS=value;}}}///用于保存播放列表的数据///</summary>List<PlayItem>ToPlayList=newList<PlayItem>()定义添加文件的按钮的方法privatevoidbuttonaddClick(objectsender,EventArgse){OpenFileDialogTmpDlg=newOpenFileDialog();TmpDlg.Multiselect=true;TmpDlg.Filter="音频文件|*mp3;*aac;*wav;*s48|视频文件|*avi;*mp4;*mpg;*mpeg"if(TmpDlg.ShowDialog()==System.Windows.Forms.DialogResult.OK){PlayItemTmpPlayItem;foreach(stringTmpIteminTmpDlg.FileNames){TmpPlayItem=newPlayItem();TmpPlayItem.ProgramName=Path.GetFileNameWithoutExtension(TmpItem);TmpPlayItem.ProgramFullPath=TmpItem;ToPlayList.Add(TmpPlayItem);}//刷新列表显示this.UpdateListDisplay();|}}

刷新播放列表中的信息privatevoidUpdateListDisplay()if(ToPlayList==null||ToPlayList.Count==0)this.listView1.Items.Clear();return;}this.listView1.BeginUpdate();this.listView1.Items.Clear();foreach(PlayItemTmpIteminToPlayList)(ListViewItemlvi=newListViewItem();lvi.Text=TmpItem.ProgramName;this.listView1.Items.Add(lvi);this.listView1.Items.Add(lvi);删除按钮的方法privatevoidbuttondeleteClick(objectsender,EventArgse)(if(this.listView1.SelectedItems==null||this.listView1.SelectedItems.Count<=0)(return;}try(ToPlayList.RemoveAt(this.listView1.SelectedItems[0].Index);this.UpdateListDisplay();}catch(Exceptionex)(MessageBoxShow("代码有错");}}开始播放按钮的方法privatevoidbuttonStartClick(objectsender,EventArgse)//形成一个播放列表"newlist","");axWindowsMediaPlayer1.currentPlaylist.clear();"newlist","");axWindowsMediaPlayer1.currentPlaylist=axWindowsMediaPlayer1.newPlaylist(foreach(PlayitemTmpIteminToPlayList)(1axWindowsMediaPlayer1.currentPlaylist.appenditem(axWindowsMediaPlayer1.newMedia(Tmpitem.ProgramFullPath));)axWindowsMediaPlayerl.settings.autoStart=true;//开始播放this.axWindowsMediaPlayer1.Ctlcontrols.play();)停止播放privatevoidbuttonStopClick(objectsender,EventArgse)(this.axWindowsMediaPlayerl.Ctlcontr01s.stop();)图6运行结果程序5-5的BUG已经完全删掉了列表里的所有播放文件,但是依然存在piI"ehMi上♦Hd代“幻“舵区』””!t''riI・片Mihtwi*1hMUeRTt—im-hLL11diUi"IeVitLAvmmW.af•#nri继续选择名称删除,会出现程序异常,这里

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论