数字图像处理基于VisualC的编程框架PPT课件_第1页
数字图像处理基于VisualC的编程框架PPT课件_第2页
数字图像处理基于VisualC的编程框架PPT课件_第3页
数字图像处理基于VisualC的编程框架PPT课件_第4页
数字图像处理基于VisualC的编程框架PPT课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、为什么需要编程框架? 将学生先期知识储备没有做到位的影响降到最小,理想的情况就是即使学生没有太多的MFC和Visual C+编程经验,也能进行有效的数字图像处理编程实验 将图像描述为一种通用的数据结构,并封装图像处理的外围功能,如图像的读取、显示和存储,使学生能够关注于图像内容处理的本身 从狭义上来讲,数字图像处理编程框架的推出,是针对C/C+语言在数字图像处理中的优劣势,目标是能够做到扬长补短,使学生能够使用C/C+语言相对轻松的完成数字图像处理功能1第1页/共43页Visual C+编程环境介绍2Visual C+ 1.0Visual C+ 1.5Visual C+ 2.0Visual C

2、+ 4.0Visual C+ 5.0Visual C+ 6.0Visual C+ 2002Visual C+ 2003Visual C+ 2005Visual C+ 2008Visual C+ 2010第2页/共43页Microsoft Visual Studio 20083第3页/共43页Microsoft Visual Studio 20084MFC应用程序向导单文档应用程序多文档应用程序对话框应用程序程序只能同时打开一种文档类型,但是可以拥有多种视窗口同时能打开多种文档类型,每种文档对应多种视窗口看起来就是一个对话框第4页/共43页基于编程框架的数字图像处理 建立一个新的多文档应用程序

3、添加数字图像处理编程框架 添加图像读取、显示和存储功能5第5页/共43页建立一个新的多文档应用程序(1)6第6页/共43页建立一个新的多文档应用程序(2)7第7页/共43页添加数字图像处理编程框架(1)8第8页/共43页添加数字图像处理编程框架(2)9第9页/共43页添加数字图像处理编程框架(3)10第10页/共43页添加图像读取、显示和存储功能11ID_IMAGEPROCESSING_OPENIMAGEFILEID_IMAGEPROCESSING_SAVEIMAGEFILEID_IMAGEPROCESSING_IMAGEEMBOSSMENTpublic:afx_msg void OnImag

4、eprocessingOpenimagefile();afx_msg void OnImageprocessingSaveimagefile();afx_msg void OnImageprocessingImageembossment();第11页/共43页打开图像文件12void CDigitalImageProcessingDoc:OnImageprocessingOpenimagefile()CFileDialog file_dialog( TRUE, NULL, NULL, OFN_HIDEREADONLY, BMP Files(*.bmp)|*.bmp|All Files(*.*)

5、|*.*| ); = Open Image File;if( file_dialog.DoModal() != IDOK )return;CString file_name = file_dialog.GetPathName();m_image.ImportFrom( file_name );UpdateAllViews(NULL);第12页/共43页保存图像文件13void CDigitalImageProcessingDoc:OnImageprocessingSaveimagefile()CFileDialog file_dialog( FALSE, bmp, NULL, OFN_HIDE

6、READONLY | OFN_OVERWRITEPROMPT, BMP Files(*.bmp)|*.bmp|All Files(*.*)|*.*| ); = Save Image File;if( file_dialog.DoModal() != IDOK )return ; CString fileName = file_dialog.GetPathName( ) ;m_image.SaveImage( fileName );UpdateAllViews(NULL);第13页/共43页14void CDigitalImageProcessingDoc:OnImageprocessingIm

7、ageembossment()if( m_image.IsColorImage()CTMatrix color = m_image.Get_color_image();long image_height = color.Get_height();long image_width = color.Get_width();CTMatrix new_img = color;for( int row = 0; row image_height; row + )for( int column = 0; column image_width; column + )if( row = 0 | column

8、= 0 ) new_img row column = RGB_TRIPLE( 128, 128, 128 );elsenew_img row column .m_Blue = BYTE( ( color row column .m_Blue - color row - 1 column - 1 .m_Blue + 255 ) / 2 );new_img row column .m_Green = BYTE( ( color row column .m_Green - color row - 1 column - 1 .m_Green + 255 ) / 2 );new_img row colu

9、mn .m_Red = BYTE( ( color row column .m_Red - color row - 1 column - 1 .m_Red + 255 ) / 2 );m_image.ImportFrom( new_img );UpdateAllViews(NULL);执行图像浮雕功能第14页/共43页经典的图像处理流程 一个经典的图像处理流程是首先获取图像的像素尺寸(高度和宽度),然后逐行(从上至下)逐列(从左至右)的遍历图像数据的每一个像素进行处理15long image_height = color.Get_height();long image_width = colo

10、r.Get_width();for( int row = 0; row image_height; row + )for( int column = 0; column image_width; column + ) / 具体处理代码 第15页/共43页数据结构16第16页/共43页使用动态一维数组表示数字图像17第17页/共43页使用动态一维数组表示数字图像18第18页/共43页基于动态一维数组的C+源码19long image_height = 2400;long image_width = 3200;BYTE* gray_image;gray_image = new BYTE image

11、_height * image_width ;for( row = 0; row image_height; row + )for( int column = 0; column image_width; column + )gray_image row*image_width + column = 255;delete gray_image;第19页/共43页基于动态二维数组的C+源码20BYTE* gray_image;gray_image = new BYTE* image_height ;for( int index = 0; index image_height; index + )

12、gray_image index = new BYTE image_width ;for( int row = 0; row image_height; row + )for( int column = 0; column image_width; column + )gray_imagerowcolumn = 255;for( index = 0; index image_height; index + )delete gray_image index ;delete gray_image;第20页/共43页运行时间21Debug版本下的运行时间(以毫秒计)Release版本下的运行时间(以

13、毫秒计)第21页/共43页方案设计22第22页/共43页数组模板类的下标操作符重载23template inline TYPE& CTArray:operator( long index ) const#ifdef _DEBUGstatic TYPE error; if( !( index = 0 & index = ( m_dimension - 1 ) ) ) Verification( Program Error ); return error; #endif return m_memory index ; 第23页/共43页矩阵模板类的下标操作符重载24#ifdef _

14、DEBUGtemplate inline CTArray& CTMatrix:operator( long index ) const static CTArray error; if( !( index = 0 & index m_rows ) ) Verification( Program Error ); return error; static CTArray rowArray; rowArray.Construction( m_memory + index * m_columns, m_columns ); return rowArray; #else templat

15、e inline TYPE* CTMatrix:operator( long index ) constreturn m_memory + index * m_columns; #endif 第24页/共43页实验分析 基于STL vector的C+源码 基于MFC CArray的C+源码 基于CTArray的C+源码 基于CTMatrix的C+源码 基于MFC CImage的C+源码 基于CTMatrix的C+源码 本书所实现的数字图像处理编程框架具有使用简单的特点。 使用简单,就意味着高效,但这种高效是指程序员的编程高效。 高效,还意味着程序运行的高效,而这个就需要考察程序的运行时间才能得

16、出。25第25页/共43页基于STL vector的C+源码26using namespace std;vector stl_vector( image_height * image_width );for( row = 0; row image_height; row + )for( int column = 0; column image_width; column + )stl_vector row*image_width + column = 255;stl_vector.clear();第26页/共43页基于MFC CArray的C+源码27CArray mfc_array;mfc_

17、array.SetSize( image_height * image_width );for( row = 0; row image_height; row + )for( int column = 0; column image_width; column + )mfc_array row*image_width + column = 255;mfc_array.RemoveAll();第27页/共43页基于CTArray的C+源码28CTArray my_array( image_height * image_width );for( row = 0; row image_height;

18、 row + )for( int column = 0; column image_width; column + )my_array row*image_width + column = 255;my_array.Destruction();第28页/共43页基于CTMatrix的C+源码29CTMatrix my_matrix( image_height, image_width );for( row = 0; row image_height; row + )for( int column = 0; column image_width; column + )my_matrix row

19、column = 255;my_matrix.Destruction();第29页/共43页基于MFC CImage的C+源码30CImage mfc_image;mfc_image.Create( image_width, image_height, 24 );for( int row = 0; row image_height; row + )for( int column = 0; column image_width; column + )mfc_image.SetPixel( column, row, RGB( 255, 255, 255 ) );mfc_image.Destroy(

20、);第30页/共43页基于CTMatrix的C+源码31CTMatrix color_image( image_height, image_width );for( row = 0; row image_height; row + )for( int column = 0; column image_width; column + )color_image row column = RGB_TRIPLE( 255, 255 ,255 );color_image.Destruction();第31页/共43页Debug版本下的运行时间(以毫秒计)32第32页/共43页Release版本下的运行时

21、间(以毫秒计)33第33页/共43页编程框架中的具体类实现34第34页/共43页CTArray类35CTArray array1;CTArray array2( 2 );float temp 4 ;CTArray array3( temp, 4 );CTArray array4( array3 );第35页/共43页CTArray类36CTArray array1,array2,array3,array4;array2.Construction( 2 );float temp 4 ;array3.Construction( temp, 4 );array4.Construction( arra

22、y3 );array4.Destruction();CTArray array1( 4 );float temp 4 ;array1.ImportFrom( temp );array1.ExportTo( temp );第36页/共43页CTArray类37CTArray invariant_moments( 4 );for( int index = 0; index 10; index + )if( invariant_moments.Is_index_valid( index ) )double temp = invariant_moments index ;第37页/共43页CTMatr

23、ix类38CTMatrix matrix1;CTMatrix matrix2( 3, 4 );CTMatrix matrix3 = matrix2;if( matrix2.Is_row_valid( 2 ) ) if( matrix2.Is_column_valid( 2 ) ) matrix2 2 2 = 10;CImagePoint point( 2, 2 );if( matrix2.Is_point_valid( point ) )int temp = matrix2 point ;第38页/共43页CTArrayEx类 模板类 CTArray 和 CTArrayEx 的区别在于: 在构

24、造数组内容(数组复制)函数(void Construction( const CTArray& array )和void Construction( const CTArrayEx& array ))中进行数组复制时,CTArray 是整个数组内存的拷贝,CTArrayEx 是逐个数组元素的拷贝。 CTArray 中的 TYPE 是不存在动态分配内存的数据类型,包括简单的数据类型(如 int,double 等)和 struct 类型以及class 类型(如 CPoint和CImagePoint 等)。39第39页/共43页CTArrayEx类 CTArrayEx 中的 TYPE 最好是存在动态分配内存的数据类型,包括 struct 类型和 class 类型(如 CString 等)。 CTArrayEx 适用所有的数据类型,但复制速度慢; CTArray 只适用不存在动态分配内存的数据类型,但复制速度快。 可以说,CTArrayEx 是 CTArray 的扩展,而 CTArray 是CTArrayEx 的特例。40第40页/共43页/ 判断图像是否为彩色图像if( m_image.IsColorIma

温馨提示

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

评论

0/150

提交评论