开篇:润墨网以专业的文秘视角,为您筛选了一篇基于VC数字图像处理的研究与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:该数字图像处理界面是基于Microsoft Visual c++ 6.0 MFC多文档编程的图像处理界面,实现.bmp格式图像的浏览与编辑,导入和导出,图像特效显示,边缘检测,旋转和翻转图片,图片增强优化,以及打印输出图片。是一款功能较简洁的数字图像管理界面,实现.bmp格式图像的操作。该界面包含两部分:启动界面和主界面。BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,一般来说BMP文件分成4个部分:位图头文件,位图信息头,颜色表,位图数据。同时BMP文件文件可以分为DIB格式和DDB格式,其中DIB格式是与设备无关的BMP文件,通用性很强,windows支持一些重要的DIB访问函数,但都没有封装到MFC中,这里我们封装了一个DIB类,其包含DIB文图处理所需要的基本成员变量和成员函数,进而以该类为基类派生其他类,实现程序的维护和移植,从而利用面向对象的方式实现图像的可视化编程。
关键词:BMP文件:图像处理;DIB位图:界面
1、引言
数字图像处理(Digital Image Prooessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。随着计算机的发展,数字图像处理技术也不断的进步,实现了对图像图像增强、复原、编码、压缩等,在空间和军事高科技中扮演越来越重要的角色。
数字图像处理的研究内容包括图像的数字化、图像增强、图像恢复、图像编码和压缩、图像分割、图像分析等。数字图像处理技术处理精度比较高,而且还可以通过改进处理软件来优化处理效果。因此,开发一个好的图像处理软件至关重要。
目前国内外有很多关于图像处理和遥感图像处理的通用软件,但是由于各个软件的应用目的和侧重点不同,这些软件在实际运用的时候都会产生这样或那样的问题。比如有些软件的界面不够友好,交互性差,用户无法调整算法参数;不具备可扩展性,软件一旦完成,不容易修改或添加新内容等。而且图像处理的算法是千变万化的,它的发展也是日新月异的,而图像处理系统软件的开发是相对滞后的。因此有些软件的内容不全或陈旧,没有涉及图像处理领域较新的成果。所以,在实际的研究和学习中,常常需要开发自己的图像处理软件,来方便某一领域的研究和学习。
本课题主要实现图像的一些简单特效显示,图像的旋转和镜像、图像的增强处理,图像灰度变换,图像边缘检测等。
2、本数字图像处理界面处理内容介绍
2.1 启动界面
为了追求该图像处理的界面的美观性,在设计主界面前,先设计一个欢迎界面,在运行主界面程序前,先显示欢迎图片。
2.2 主界面
该数字图像处理界面是基于vc++6.0MFC多文档编程的界面程序,实现数字图像的简单查看与编辑操作。主界面主要内容有:
图像文件浏览:实现对.bmp格式图像文件的浏览。
图像特效显示:主要有自上而下扫描显示,从左至右的滑动显示和渐进显示。
视图3c档的设置:实现了执行操作后新旧图像在不同视图中显示设置。
图像的灰度变换:包括图像的二值化,彩色图像转换灰度图像,灰度图像转换8位图像。
图像的镜像与旋转变换:包括水平镜像,垂直镜像,顺时针旋转90度,逆时针旋转90度,图像旋转180度。
图像的增强处理:主要是图像锐化处理。
图像的边缘检测和形态学处理:包括罗伯茨算子边缘检测,图像轮廓提取。
3、需求流程分析
通过对系统的需求分析,系统的基本功能已经确定。整个系统各个模块,如图3.1所示:
4、系统详细设计
4.1 基类的设计
BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,同时BMP文件文件可以分为DIB格式和DDB格式,其中DIB格式是与设备无关的BMP文件,通用性很强。Windows支持一些重要的DIB访问函数,但都没有封装到MFC中,这里我们封装了一个DIB类,其包含DIB位图处理所需要的基本成员变量和成员函数,进而以该类为基类派生其他类,实现程序的维护和移植。在这里我们命名这个基类为ImgCenterDib,各种算法的实现都是以ImgCenterDib类为基类派生出来。同时将各个模块函数封装起来成为一个类,这些类都以ImgCenterDib类共有继承,在主程序中调用,减少代码的重复性,提高利用率。派生关系如图4.1:
4.2 函数的功能
4.2.1 tretchDIBits:
该函数将DIB中矩形区域内像素使用的颜色数据拷贝到指定的目标矩形中。如果目标矩形比源矩形大小要大,那么函数对颜色数据的行和列进行拉伸,以与目标矩形匹配。如果目标矩形大小要比源矩形小,那么该函数通过使用指定的光栅操作对行列进行压缩。
4.2.2:int StretchDIBits(HDC hdc,int XDest,int YDest,int nDestWidth,int nDestHeight,int XSrc,int Ysrc,intnSrcWidth,int nSrcHeight,CONST VOID*lpBits,CONSTBITMAPINFO*lpBitsInfo,UINT iUsage,DWORD dwRop);
hdc:指向目标设备环境的句柄。
XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。
YDeSt:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
nDestWidth,指定目标矩形的宽度。
nDestHeight:指定目标矩形的高度。
XSrc:指定DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示。
YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。
nSrcWidth:按像素点指定DIB中源矩形的宽度。
nSrcHeight:按像素点指定DIB中源矩形的高度。
IpBits:指向DIB位的指针,这些位的值按字节类型数组存储。
lpBitslnfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。
iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的RGB值或索引。参数iUsage必须取下列值,这些值的含义如下:
DIB_PAL_COLOR:表示该数组包含对源设备环境的逻辑调色板进行索引的16位索引值。
DIB_RGB_COLORS,表示该颜色表包含原义的KGB值。
dwRop:指定源像素点、副示设备环境的当前刷子和目标像素点是如何组合形成新的图像。
如果NsrcWidth和NdestWidth符号不同,那么函数将沿着X轴创建位图镜像。如果NsrcHeight和NdestHeight符号不同,那么函数将沿着Y轴创建位图镜像。
4.3 模块设计
具体的模块设计如下:
4.3.1 欢迎界面
将欢迎图像作为对话框,在运行主界面程序前,先显示该对话框。
4.3.2 主界面设计
(1)文件操作模块。文件操作模块是整个系统中最基本的组成成允该模块主要实现图像的文件操作,包括新建操作,打开操作.保存操作,另存为操作,关闭操作,打印操作。
功能截图如下
(2)特效显示模块。渐进显示:先将画刷设计成白色,然后将已经显示出来的原图象重新设置成白色,达到刷新屏幕的效果。每隔3秒,调用一次StretchDIBits,来达到渐进显示效果;
滑动显示:每隔3秒,调用一次StretchDIBits,将图片一点点向左显示,改变第3和7参数,并慢慢增加4和8的参数,使显示的矩阵的宽度变大,达到滑动的效果;
扫描显示:其原理和滑动显示相同,只是改变的参数改变。
(3)图像灰度变换模块。1)二值化:图像的二值化,就是将图像上的像素点的灰度值设置为O或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。2)彩色变灰色格式:当RGB中3种颜色的含量相等时即为灰色。因此只要将RGN3色设置成一样就可以了。3)灰度变彩色格式:只要把3基色的含量变的不一样即可。
(4)图像镜像与旋转模块。图像镜像与旋转模块实现了图像的镜像变换和图像旋转显示,包括水平镜像,垂直镜像,顺时针旋转90度,逆时针旋转90度,图像旋转180度。
(5)图像增强处理模块。图像增强处理模块主要实现了图像锐化效果,是模糊的图像变得更加清晰,颜色变得鲜明突出,更适合人眼观察和识别。
(6)图像边缘检测模块。1)罗伯茨算子边缘检测。2)图像轮廓提取:该功能只能处理二值化后的图,找到一个黑点后扫描周围的8个点是否全为黑色,如果是则将该点致白色。