搜档网
当前位置:搜档网 › 基于OpenCV的数字图像处理专设报告

基于OpenCV的数字图像处理专设报告

基于OpenCV的数字图像处理专设报告
基于OpenCV的数字图像处理专设报告

专业设计报告

设计题目:基于OpenCV的数字图像处理

姓名:朱正乔学号:20120662 学院:自动化专业:测控

指导教师:韩芳芳

同组人姓名:温大鹏刘圣楠

摘要:

OpenCV(OpenSourceComputerVisionLibrary)是Intel公司面向应用程序开发者开发的计算机视觉库。它轻量级而且高效,由一系列C函数和少量C++类构成,同时提供了MatLab等语言的接口,实现了图像处理和计算机视觉方面很多通用算法,因此极大地方便了图像处理和视频技术的二次开发。OpenCV具备强大的图像和矩阵运算能力,有效提高开发效率和程序运行的可靠性。开发者可根据需要在Windows和Linux两种平台进行开发。OpenCV是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像和视频处理。同时利用面向对象的VC++编程工具,用C++语言进行程序编写,大大提高了计算机的运行速度。OpenCV算法库为VC++编程处理数字图像提供了很大的方便,其必将成为图像视频处理领域的强有力的工具。

本设计主要介绍了数字图像处理的含义,OpenCV的特点以及结构,然后以图像打开与显示、灰度化、二值化和视频采集为例介绍了OpenCV在数字图像处理中的典型应用,以及数字图像处理的各种算法和系统的各部分组成及功能,给出了相应的处理结果,实现了人机软件界面。

关键词: OpenCV 图像处理图像灰度化二值化

一、 设计的任务和目的

1.1 设计的目的

本次设计的目的是让初学者了解有关图像处理的相关知识,并对该系统进行简单的图像处理。

1.2 设计的任务

本次设计主要研究如何通过VC++平台利用OpenCV函数库,开发一个针对学习和研究的数字图像处理系统,为初学者提供一个图形用户界面交互平台,供大家学习并研究数字图像处理的技术方法。

首先介绍了数字图像处理的主要内容,给出了现有图像处理软件的结构和构成。在熟悉了图像处理的各种算法之后,研究了面向对象的语言VC++的编程方式及其在编写图像处理软件和图像处理算法中模块化的编程思想。最后在Windows操作系统下,利用C++语言在Visual C++ 2010的开发环境下,设计和实现了一个数字图像处理系统。

二、 设计原理

2.1 数字图像处理简介

数字图像处理(DigitalImageProcessing)是将图像本身的信号转换成数字信号且运用计算机对其进行处理,最早可以追溯到20世纪的20年代。它已经成为一门具有广阔前

景的学科,目前已经广泛应用于科学研究、生物医学、航空航天、机器人视觉、工业检测等领域。目前数字图像处理有以下几个研究的方面:一是图像数字化,二是图像编码,三是图像增强,四是图像恢复,五是图像分割,六是图像分析,七是图像重建。

一幅静态图像可以用一个二维函数f(x,y)来表示,这里x和y表示二维空间中坐标点的位置,而 f 则代表图像在点f(x,y)的某种性质的数值。例如常用的图像一般是灰度图,这时 f 表示灰度值,对应客观图像被观察到的亮度。常见的图像是连续的,即f(x,y)的值可以是任意实数。为了适应数字计算机的处理,必须对连续图像函数进行空间和幅度数字化,经过数字化后的图像称为数字图像。数字图像是由有限的元素组成的,每个元素都有一个特定的位置和幅值,这些元素称为图像元素或像素。而数字图像处理是指借用数字计算机处理数字图像。数字图像一般可以通过以下三种途径获取:(1)直接由二维离散数学函数生成数字图像。

(2)将模拟图像、物理图像等可见图像经过数字化处理转换为数字图像,例如将一幅照片通过扫描仪输入到计算机中,扫描的过程实质上就是一个数字化过程。

(3)应用光电转换设备可以直接得到数字图像,例如数字相机使用CCD器件记录影像,然后把CCD器件的电子信号转换成数码信号,并把所得到的数字图像存入存储器中。

无论采取哪种方式所获取的数字图像在数学上都是一个二维矩阵,因此,数字图像处理的实质是将原始图像变为目标图像的过程,实质上是由一个矩阵变为另一个矩阵的数学过程。不管是图像的放缩、图像的几何变换、图像的灰度变换还是离散余弦等正交变换,本质上都是基于图像矩阵的数学运算。获取图像信息的目的不仅仅只是为了获取图像,更为主要的是对图像信息进行加工处理,以满足我们的视觉心理或者应用需求。因此,从某种意义上讲,对图像信息进行处理比图像获取更为重要。图像处理一般是指数字图像处理,所谓数字图像处理就是指对一个物体的数学表示,即对一个二维矩阵施加一系列的操作,以得到所期望的结果。虽然某些处理也可以用光学方法或模拟技术实现,但它们远不及数字图像处理那样灵活和方便,因而数字图像处理成为图像处理的主要方面。

既然图像处理如此重要,那么开发一个好的数字图像处理软件也是十分必要的。MATLAB软件虽然能够对数字图像进行方便的处理,并且其制作的界面也比较友好,但是由于其过于庞大,移植性和速度方面也很难与VC++相比。另外,由于商业化的VC++数字图像处理软件价格比较昂贵,而且不便于二次开发,所以自己利用VC++集成开发环境开发一套简单的数字图像处理软件系统,本系统界面友好,不但能对现代光学测量中散斑和条纹图像进行良好的处理,而且还能够满足一些简单的数字图像处理的需求,为以后的学习和研究奠定了基础。

2.2 数字图像处理的特点

(1)信息量大

由于数字图像在计算机中采用二维矩阵表示和存储,所以其信息量很大。比如对一幅由512×512 个像素组成的电视图像,其灰度级用8比特的二进制数来表示,其信息量为512×512=8×256KB对于这样大信息量的图像,虽然我们可以获取较多的信息,但是如果要对此图像进行处理,我们必须要用具有相当大内存和存储器的计算机。

(2)数字图像占用的频带较宽

数字图像信息占用的频带要比语音信息大几个数量级。如语音带宽约为4KHz,而电视图像的带宽却为 5.6MHz 左右。所以在成像、传输、存储、处理、显示等各个环节的实现上,技术难度较大,成本亦高,这就对频带压缩技术提出了更高的要求。

(3)数字图像像素间相关性大

数字图像中各个像素的灰度并不是独立的,其间的相关性很大,就电视画面而言,同一帧各相邻像素间的相关系数可达0.9 以上,而相邻两帧之间的相关性比帧内相关性一般还要大些,因此图像信息具有很大的可压缩性。如果在图像通信领域中,能够充分利用数字图像的这一特性,将大大提高图像处理和传输的效率。

(4)再现性好、适用面宽

由于数字图像在计算机中采用二维矩阵表示和存储,这样计算机容易处理。因此,在传送和复制图像时,只在计算机内部进行处理,这样数据就不会丢失或遭破坏,保持了完好的再现性。这一点在模拟图像处理中,几乎是很难实现的。另外,对于数字图像处理来说,图像可以来自多种信息源,它们可以是可见光图像,也可以是不可见的多光普图像;可以是电子显微镜图像,也可以是遥感图像甚至天文望远镜图像。只要对这些来自不同信息源的图像数字化后,都可以采用计算机来处理。

(5)图像信息的视觉效果主观性大、识别困难

经过处理后的图像一般是给人观察和评价的,因此受人的主观因素影响较大,比如说兴趣、视觉、情绪等。通常情况下,图像的识别比较困难。如果要求取图像上某一区域的面积,利用计算机可以很方便的达到目的,并且精确度很高;但是要计算机识别某一区域是什么东西,则十分困难。

(6)图像处理技术综合性强

数字图像处理涉及的技术领域相当广泛,如计算机技术、电子技术、通信技术等。当然,数学、物理学等领域更是数字图像处理的基础。并且在数字图像处理中涉及到硬件、软件、接口、网络等多项技术。总而言之,数字图像处理技术的发展涉及越来越多的基础理论知识,它是一项涉及多学科的综合性技术。

数字图像处理的数据量有时非常大,而且有时又对处理的实时性要求很高,所以对于所有图像处理的算法都用普通的编程语言进行编写,虽然理论上能够实现,但是效率比较低下,而且难度也相当大。基于以上的考虑,在数字图像处理中引进OpenCV,以实现图像处理和计算机视觉方面的通用算法,可以用于开发实时的图像处理、计算机视觉和模式识别等,而且其中大部分函数都进行了汇编优化。可以说,基于OpenCV开发的图像处理算法运行起来具有更高的效率。

2.3 VC++简介

Visual C++是微软公司推出的一种高度综合性能的开发Win32 环境程序,面向对象的可视化集成编程系统。自其诞生以来,因其易用性和良好的用户界面,一直是Windows 环境下最主要的开发工具。而且由于Visual C++本身就是一个图形的开发界面,提供了丰富的关于位图操作的函数,所以对开发图像处理系统提供了极大的方便。它现在已经成为开发Win32 程序,包括图像处理程序的主要开发工具。现在常用的版本有Visual C++ 6.0/Visual C++.NET/ Visual C++ 2005 等.本次设计主要使用的是Visual C++ 2010。

Visual C++开发语言具有如下特点:

(1)与Windows 紧密结合。程序员在Windows 平台下开发应用程序时,可以利用Windows API 提供给应用程序的接口程序对Windows 进行控制。例如,程序员可以为自己的应用程序提供一些图形设备接口(GDI),来显示一些图形和格式的文本。Visual C++作为优秀的可视化编程工具,它提供了大量类库和各种控件,而这些类库和控件都是构架在Windows API 函数基础之上的,是封装了的API 函数的集合,让程序员进行应用开发时更方便,以加速Windows应用程序开发的过程。因此,Visual C++在使用API 等方面和Windows 联系得最为紧密。

(2)强大的类库支持和类改造能力。使用Visual C++ MFC 类库编程,就可以得到MFC类库强大的支持。MFC 本身就是一个庞大的C++类库,这些类有效地实现了对Win32 API、OLE API、ODBC API 等底层函数的封装,因此不需要再记忆大量的API 函数,只要实例化一个C++类,并采用该实例的成员变量即可,从而使开发过程更加合理化,编程更加简便化。同时,MFC框架集成了很多应用程序模板,而这些模板都采用了以文档/视图为中心的思想,每一个模板都包含一组特定的类。由于C++类支持继承和虚拟函数,程序员可以通过使用继承和扩展适当的C++类来实现特定的目的。例如,应用程序特定的事件由程序员的派生类来处理实现对基类的继承。

(3)拥有高效率的运行速度。要使软件拥有高效率的运行速度,我们应该从程序编写的质量和工具的编译质量两方面着手。由于Visual C++在开发Windows 应用程序时,它主要采用C语言、C++通用类以及原始的Windows 应用程序编程接口,而这些函数都是比较低层的函数,一次运行起来速度比较快,使用灵活,从而保证了用Visual C++编写出来的软件产品拥有高效率的运行速度。

2.4 OpenCV简介

开放源代码的计算机视觉类库OpenCV由英特尔公司位于俄罗斯的研究实验室开发,它是一套可以免费获得的由一些C函数和C++类所组成的库,用来实现常用的图像处理以及计算机视觉算法。与英特尔公司所开发的另外一个图像处理库IPL相比,OpenCV主要针对图像的一些高级处理,例如目标分割、运动分析与跟踪、特征检测以及三维重建等。

2.4.1 OpenCV的特点

OpenCV是开发的C源码,基于Intel处理器指令集开发的优化代码,具有统一的结构以及功能定义、强大的矩阵计算能力、方便灵活的接口,而且同时支持windows、linux 和MacOS平台等。

*开放的源代码,对个人以及商业的开发完全是免费的;

*支持大多数的C和C++编译器,可以在不同的平台之间进行移植,例如:VC++6.0、https://www.sodocs.net/doc/9710755047.html,2005、https://www.sodocs.net/doc/9710755047.html,2008以及C++Builder等;

*可移植,跨平台性好,可以在windows,linux和MacOS平台上运行;

*OpenCV所有的算法都是基于封装于IPL的具有高灵活性的动态数据结构,并且有一半以上的函数在设计与汇编时针对Intel处理器指令集将代码进行了优化;

*具有强大的图像以及矩阵的计算能力,大大减少了开发者的工作量,有效提高了程序开发的效率以及程序运行的可靠性;

*具有方便灵活的接口,包含了300多个C/C++函数,代码效率高;支持高层API;可以独立使用,也可以使用外部库。

2.4.2 OpenCV的模块

本文采用的是OpenCV2.4版本,包括以下几个模块,具体功能是:

*CV模块:它是主要的OpenCV函数,包括图像处理、运动分析与对象跟踪、结构分析、模式识别、相机标定以及三维重建等;

*CVAUX模块:包括一些三维跟踪、PCA、HMM等函数;

*CXCORE模块:该库包括了所有OpenCV运行时的一些最基本的数据结构、矩阵、数组的基本运算,包括出错处理的一些基本函数;

*ML模块:机器学习库,包括一些用于分类、回归和数据聚类的类和函数;

*HIGHGUI模块:图像界面函数,包括图像用户窗口GUI,图像视频I/O,系统调用函数等。

2.4.3 OpenCV的体系结构

OpenCV中每个函数的命名都以“cv”开头,然后是该函数的行为或目标,例如用来创建图像的函数“cvCreateImage”,载入图像的函数“cvLoadImage”等等。

2.4.4 数据结构

OpenCV设计了一些基础的数据类型,例如图像类的IplImage,矩阵类的CvMat,可变集合类的CvSeq、CvSet以及多维柱状图混合类CvHistogram。在这些基础的数据类型中最常用的是IplImage类,

下面对其进行详细地介绍,其它的数据类型请参考相关文献。

IplImage类的具体定义如下:

typedefstruct_IplImage

{

intnSize;/*IplImage大小*/

intID;/*图像头的版本*/

intnChannels;/*通道数,根据不同颜色的位图支持1,2,3或4个通*/

intalphaChannel;/*被OpenCV忽略*/

intdepth; /*像素的位深度:IPL_DEPTH_8U,IPL_DEPTH_8S, IPL_DEPTH_16U,

IPL_DEPTH_16S,IPL_DEPTH_32S,IPL_DEPTH_32F,IPL_DEPTH_64F可支持*/ charcolorModel;/*被OpenCV忽略*/

charchannelSeq;/*同上*/

intdataOrder;/*0-交叉存取颜色通道,1-分开的颜色通道.只有cvCreateImage可

以创建交叉存取图像*/

intorigin;/*0-顶—左结构,1-底—左结构(Windowsbitmaps风格)*/

intalign;/*图像行排列(4or8).OpenCV忽略它,使用widthStep代替*/

intwidth;/*图像宽像素数*/

intheight;/*图像高像素数*/

struct_IplROI*roi;/*图像感兴趣区域.当该值非空只对该区域进行处理*/

struct_IplImage*maskROI;/*在OpenCV中必须置NULL*/void*imageId;/*同上*/

struct_IplTileInfo*tileInfo;/*同上*/

intimageSize;/*图像数据大小*/

char*imageData;/*指向排列的图像数据*/

intwidthStep;/*排列的图像行大小,以字节为单位*/

intBorderMode[4];/*边际结束模式,被OpenCV忽略*/

intBorderConst[4];/*同上*/

char*imageDataOrigin;/*指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的*/

}IplImage;

2.4.5 数据存取方式

OpenCV数据的存取方式有三种:间接存取、直接存取、带指针直接存取。第一种速度较慢,后两种速度较快。下面对带指针直接存取的方式进行介绍。

假定图像定义为IplImage*img,不同类型的图像元素存取方式为:

8位单通道的图像,像素I(i,j)存取操作为:

intstep=img->widthStep/sizeof(uchar);uchar*data=(uchar*)img->imageData;I(i,j)~data[i*step+j];

8位3通道的图像,像素I(i,j)存取操作为:

intstep=img->widthStep/sizeof(uchar);

intchannels=img->nChannels;

uchar*data=(uchar*)img->imageData;

I(i,j)B~data[i*step+j*channels+0];//BLUE分量

I(i,j)G~data[i*step+j*channels+1];//GREEN分量

I(i,j)R~data[i*step+j*channels+2];//RED分量

2.5 本人的任务

在本次专业设计中,本人的主要任务是实现图像的二值化,并显示出来。

图像二值化是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多。越精准的方法计算量也越大。图像的二值化按下述公式进行:

式中,G(x,y)是原图像中位于(i, j)处像素的灰度;Gb(i, j)是二值化后该处的像素值,它只能取O或l,将上式所得二值图像中数值为0的部分表示背景,数值为1的部分表示对象图形。T为用于二值化处理的闭值。二值化的过程本身比较简单,关键问题就是闽值的选取。

三、设计具体实现的方法、步骤及实验

3.1 OpenCV安装与环境变量配置

(1)在https://www.sodocs.net/doc/9710755047.html,/网站上,找到对应平台(Linux/Unix/Mac或Windows)的下载页,下载opencv最新版本的可执行文件,下载后运行(解压)到一个文件夹中。解压完成后,有两个文件夹:一个“source”文件夹,其中doc文件夹中包含的是文档,include文件夹中是所有的头文件,modules文件夹中包含所有的源文件,samples文件夹中是许多简短的学习范例;另一个“build”文件夹中,是已经编译好的二进制文件库(对于opencv2.4.0以上,就不需要再使用CMake软件进行编译了),其中x64(64位系统)、x86(32位系统)文件夹中有对应的VC9、VC10环境所使用的文件。

(2)设opencv2.4.0解压在“D:\Program Files (x86)\opencv24”目录下。

(3)设置环境变量,桌面“计算机”——右键“属性”——“高级系统设置”——“环境变量”,修改“系统变量”中的“path”值,编辑,保留之前的,最后加“;”(英文分号),然后添加“D:\Program Files (x86)\opencv24\build\x64\vc10\bin”,修改完系统环境变量后,注销一下电脑。

(4)建立一个VC++工程,打开Visio 2010,菜单“新建”——“项目”——“Visual C++”——“Win32控制台应用程序”——“输入项目名和项目路径”——“控制台应用程序”和“空项目”。

(5)在“解决方案资源管理器”中,点中“当前项目名”,点击菜单“项目”——“属性”——“配置管理器”,“活动解决方案配置”选择“Debug”,“活动解决方案平台”选择“新建”,在对话框中,“键入或选择新平台”中填写“x64”;“从此处复制设置”下拉列表中选择“win32”,并勾选“创建新的项目平台”;点击“确定”按钮,关闭“配置管理器”对话框。

(6)在“属性管理器”中,右键点击“Debug|x64”,点击“添加新项目属性表”,写好名称,添加,然后再进行属性配置(这样做的好处是,属性配置可以以一个属性表保存,以后的项目用到相同的属性表,可以重新加载使用,而不用每次都重新填写)。

① “VC++目录”——包含目录,添加:

D:\Program Files (x86)\opencv24\build\include

D:\Program Files (x86)\opencv24\build\include\opencv

D:\Program Files (x86)\opencv24\build\include\opencv2

② “VC++目录”——库目录,添加:

D:\Program Files (x86)\opencv24\build\x64\vc10\lib

③ “C/C++”——“常规”——“附加包含目录”,添加:

D:\Program Files (x86)\opencv24\build\include

D:\Program Files (x86)\opencv24\build\include\opencv

D:\Program Files (x86)\opencv24\build\include\opencv2

④“链接器”——“输入”——“依赖附加项”,添加:(这里需要注意的有几点:写绝

对路径,否则可能有问题;需要添加你安装的opencv版本的库;库的后缀.lib一定要写上;添加以“d”结尾的库,是在debug模式下需要的;用回车符来分行,就不要在库名后再加“;”;项目用都到什么库的函数,这里就把什么库添加上)

D:\Program Fails\opencv\build\x64\vc10\lib\opencv_core2410d.lib

D:\Program Fails\opencv\build\x64\vc10\lib\opencv_highgui2410d.lib

D:\Program Fails\opencv\build\x64\vc10\lib\opencv_calib3d2410d.lib

D:\Program Fails\opencv\build\x64\vc10\lib\opencv_features2d2410d.lib

D:\Program Fails\opencv\build\x64\vc10\lib\opencv_imgproc2410d.lib

3.2 VC++窗口的创建过程

在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC在调用Windows的API(CreateWindow或者CreateWindowEx)创建窗口之前,要求程序员必须定义一个窗口类(不是传统C++意义上的类)来规定所创建该窗口所需要的各种信息,主要包括:窗口的消息处理函数、窗口的风格、图标、鼠标、菜单等。

在人机界面的设计中,添加了三个图像显示窗口:左上方是图像的采集显示;右上方是采集图像的截取并作了简单的图像处理;左下方是图像的读取、显示并进行简单的图像处理。另外还设计了五个单击按钮,这五个单击按钮分别为:打开图像、图像灰度化、二值化、视频采集和抓图。人机界面效果如图1。

图1 程序人机界面设计

3.3 图像的打开与显示

不同类型的图像内部结构不同,需要根据图像的结构采用不同的方法将图像文件中的数据读入内存。OpenCV的API函数cvLoadImage可以将图像数据从文件中加载进来,而且不论加载前图像是什么类型,加载后它返回的都是一个指向IplIm-age结构体的指针,方便了后续处理。cvLoadImage的函数原型为:IplImage*cvLoadImage

(constchar*filename,intiscolor=1)返回值为一个指向IplImage结构体的指针。IplImage 结构体的width、height、widthStep成员分别指示了图像的宽像素数、高像素数、排列的图像的行大小,指针参数imageData指向了实际的图像数据。

(1) 图像打开的关键程序如下:

void CMyImgOpenGUIDlg::OnClickedButtonImgopen()

{

img_src=cvLoadImage("D:\\ProgramFails\\zzq1\\MyImgOpenGUI3\\img.bmp",1);

if(!img_src)

{

MessageBox(_T("打开图片错误"));

return;

}

ShowImage(img_src, IDC_STATIC_PIC);

(2) 图像显示的关键程序如下:

void CMyImgOpenGUIDlg::ShowImage(IplImage* img, UINT ID)

{

CDC* pDC=GetDlgItem(ID)->GetDC();

HDC hDC=pDC->GetSafeHdc();

CRect rect;

GetDlgItem(ID)->GetClientRect(&rect);

SetRect(rect,rect.left,rect.top,rect.right,rect.bottom);

CvvImage cimg;

cimg.CopyOf(img);

cimg.DrawToHDC(hDC,&rect);

ReleaseDC(pDC);

}

程序效果如图2

图2 打开图像

3.4 图像的灰度变换

彩色图像由于其信息容量比灰度图像大,因此处理难度大、速度慢,而且在识别一般图像的过程中,灰度图像所含的信息量已经足够,因此先将彩色图像转换为灰度图像。

灰度图像与黑白单色图像的区别是灰度图像加上了颜色深度的概念,单纯的看,灰度图也是黑白的,就像黑白电视显示的图像一样,但是点与点之间黑的程度是不一样的,这就是深度即灰度,一般灰度图像分为256级。设彩色图像某像素点颜色值为,根据光学原理分解为红色(r),绿色(g),蓝色(b)三个分量,则灰度值为:将彩色图像中的所有的点经过上式转变后,该图像转变成灰度图像,各像素点的灰度值在(0-255)范围内,其中0为黑色,255为白色。这个转换过程可以用OpenCV中的函数来实现,这个函数的原型为:voidcvCvtColor(constCvArr*src,CvArr*dst,intcode)其中:src—输入的8-比特或浮点图像;dst—输出的8-比特或浮点图像;code—色彩空间转换。

图像的灰度变换的关键程序如下:

void CMyImgOpenGUIDlg::OnClickedButtonImgtogray()

{

img_gray=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_8U,1);

if (img_src->nChannels!=1)

{

cvCvtColor(img_src,img_gray,CV_BGRA2GRAY);

}

ShowImage(img_gray, IDC_STATIC_PIC);

}

程序效果:

图3 图像灰度化

3.5 图像的二值化

图像的二值化处理就是将图像上的点的灰度置为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于在对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阈值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阈值选取技术来分割该图像。动态调节阈值实现图像的二值化可动态观察其分割图像的具体结果。

图像二值化的关键程序如下:

void CMyImgOpenGUIDlg::OnClickedButtonTwovalue()

{

int thres=100;

IplImage *img_bw=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_8U,1);

double imgbwpixmaxvalue=200;

cvThreshold(img_gray, img_bw,thres,imgbwpixmaxvalue,CV_THRESH_BINARY);

ShowImage(img_bw, IDC_STATIC_PIC);

}

程序效果:

图4 图像的二值化

3.6 视频图像采集与截取

利用OpenCV函数库里的函数cvCaptureFromCAM()得到视频,然后再一帧一帧的获取图像,再显示出来,然后将采集到的图像进行简单的图像处理。cvCaptureFromCAM ()函数的意思是调用摄像头,括号中的参数是摄像机的ID。

(1) 视频采集的关键程序如下:

void CMyImgOpenGUIDlg::OnClickedButtonOpencamera()

{

if(!pCapture)

{

pCapture = cvCaptureFromCAM(-1);

pCapture = cvCaptureFromCAM(0);

pFrame = cvQueryFrame(pCapture);

ShowImage(pFrame, IDC_STATIC_CAMERA);

}

m_bOpenCamera=1;

SetTimer(1, 10, NULL);

}

(2) 视频图像截取的关键程序如下:

void CMyImgOpenGUIDlg::OnClickedButtonSnap()

{

m_bOpenCamera=0;

SetTimer(2, 10, NULL);

}

void CMyImgOpenGUIDlg::OnTimer(UINT_PTR nIDEvent)

{

switch(nIDEvent)

{

case 1:

{

if(m_bOpenCamera)

{

pFrame = cvQueryFrame(pCapture);

ShowImage(pFrame, IDC_STATIC_CAMERA);

}

break;

}

case 2:

{

IplImage* pGray = cvCreateImage(cvGetSize(pFrame), 8, 1);

cvCvtColor(pFrame, pGray, CV_BGR2GRAY);

cvThreshold(pGray, pGray, 100, 255, CV_THRESH_BINARY);

ShowImage(pGray, IDC_STATIC_PROCESS);

break;

}

}

CDialogEx::OnTimer(nIDEvent);

}

void CMyImgOpenGUIDlg::OnClose()

{

cvReleaseCapture(&pCapture);

KillTimer(1);

KillTimer(2);

CDialog::OnClose();

CDialogEx::OnClose();

}

程序效果如图5

图5 视频图像的采集

四、心得体会

本设计主要研究了数字图像处理技术,包括数字图像的显示、图像的灰度化、图像的二值化以及视频图像的采集。由于水平有限,本设计还存在许多不足。进一步完善这个系统的功能,还需要深入研究,可以从以下几个方面来开展:

(1)数字图像处理的算法还有待于完善和优化,以便于更全面、高效的对图像进行处理。

(2)对图像文件的格式还有待于健全,可以在文件模块中增添JPEG、TIF、PCX 等格式的图像文件,扩展系统的功能。

参考文献:

[1] https://www.sodocs.net/doc/9710755047.html,puterTechniquesinImageProcessing[M].NewYork:AcademicPress,1970.

[2] 李庆义. 计算机图像处理技术综述[J]. 科技情报开发与经济, 2007,17(11):226-228.

[3] 陆宗骐. C/C++图像处理编程. 北京: 清华大学出版社, 2005,1.

[4] 陈炳权, 刘宏立, 孟凡斌. 数字图像处理技术的现状及其发展方向[J]. 吉首大学学报:

自然科学版, 2009,30(1):63-69.

[5] 郭晖, 陈光. 基于OpenCV的视频图像处理应用研究[J]. 微型机与应用,

2010,29(21):14-16,20.

[6] 黎松, 平西建, 丁益洪. 开放源代码的计算机视觉类库OpenCV的应用[J]. 计算机应用与软件, 2005,22(8): 134-136.

[7] 谭歆, 武岳. 基于OpenCV的运动目标检测方法研究与应用[J]. 视频应用与工程, 2010,34(S1):184-187,193.

[8] Gary Bradski,Adrian Kaehler.Learning OpenCV:Computer Vision with the OpenCV Libray[M].O’REILLY,2008,(3).

[9] 刘瑞祯, 于仕琪. OpenCV教程——基础篇[M]. 北京: 北京航空航天大学出版社, 2007.

[10] 李庆义. 计算机图像处理技术综述[J]. 科技情报开发与经济, 2007,17(11):226-228.

成绩评定

平时表现(50%) 报告成绩(20%) 答辩成绩(30%) 总评成绩评语

图像处理opencv代码

#include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

java画板课程设计报告

画板 一、需求分析 平时生活中,我们会需要处理一些基本的图像,也有可能需要花一些简单的图像,平时所使用的图形处理工具有PhotoShop、Windows 画图工具等,其中PhotoShop 是一款非常强大的图形处理工具,Windows 画图工具则是一款较为简单的画图工具,功能较为简单,用Windows画图工具,是一种比较简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的基本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等。这次试验中我做的就是一个仿照windows画板的程序。 功能:1.利用graphics 类来向界面上画上相应内容 2.能够画出直线,矩形,多边形,椭圆形,圆矩形等 3.能够实现橡皮,刷子,喷枪等工具。 4.能够实验颜色的设置 5.能够保存图片和打开图片(当保存名一致时需提示) 6.界面尽量合理,可以仿照windows画板界面。 二、概要设计

流程图 画板软件类图 1.工具接口Tool: 从图中可以看到,工具接口Tool 定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下

mousePressed()、点击mouseClicked()五个动作,并用String 类型的常量属性来定义工具的类型。这个接口只有一个实现类AbstractTool,而每个工具类 都是去扩展AbstractTool 类,在图中表现为Tool1、Tool2…….ToolN。 2.Tool的实现类AbstractTool AbstractTool 是Tool 的实现类,也是一个抽像类,所以并不能被创建,只能被继承。此类实现Tool 中定义的所有方法,并扩展了其它方法,让其子类继承或者重写。该类中为其他的工具类提供了大部分的实现,那么它的子类就可以不必再做重复的实现,只关心与本类相关的逻辑, 3.AbstractTool的子类 AbstractTool 一共有ArrowTool(箭头)、PencilTool(铅笔)、BrushTool(刷子)、EraserTool(橡皮擦)、LineTool (直线)、RectTool (矩形)、PolygonTool (多边形)、RoundTool (椭圆形)、RoundRectTool(圆矩形)、AtomizerTool (喷墨)、ColorPickedTool(颜色选择)11 个子类, 4. 界面类ImageFrame 这个画图工具的界面的主要放在这个类中实现 5. 业务逻辑类ImageService 除鼠标的画图功能外(画图功能由Tool 的实现类完成),初始化画板、图片的新建打开与保存、各种面板的显示与隐藏、颜色的编辑、整个界面的刷新、菜单等业务逻辑都放在这个类中实现, 对象,它并没有保存一些状态属性。 6 .文件选择类ImageFileChooser ImageFileChooser 类继承了JFleChooser 类,JFleChooser 是Java 提供的一个简单的文件选择机制,我们这里扩展这个类,是为了增加我们自己的文件过滤器。 三、运行环境、开发语言 Window xp 和elipse Java语言

基于OpenCV识别库的面部图像识别系统的设计

基于OpenCV识别库的面部图像识别系统的设计 本系统采用J2EE技术并以OpenCV开源计算机视觉库技术为基础,实现一套具有身份验证功能的面部图像识别信息管理系统。系统使用MySQL数据库提供数据支撑,依托于J2EE的稳定性和Java平台的可移植性使得本系统可以在各个操作系统平台中运行,同时提供在互联网中使用面部识别技术的一套较为完备的解决方案。 标签:OpenCV;人脸识别;生物学特征 引言 随着信息技术的飞速发展以及互联网的深入普及,越来越多的行业和领域使用信息技术产品以提高工作效率和管理水平。但是由于人们隐私信息的保护意识薄弱,出现了许多信息安全的问题。在人们对于信息安全越来越重视的情况下,许多技术被应用到信息安全领域中来。较为先进的技术有虹膜识别技术、遗传基因识别技术以及指纹识别技术等。而论文采用的是当前热点的面部图像识别技术。 1 系统实现算法及功能分析 1.1 面部图像的生物学特征模型的建立 本系统是利用面部图形的生物学特征来识别不同的人。由于每个人的面部图像都有各自的特征但又具有一定的通性,需要应用生物学中相关知识加以解决。可以利用已有的生物学测量手段以及现有的算法构建人的面部图像生物学特征模型(简称:面部模型),并应用于系统中,面部模型的建立为面部图像识别的功能提供实现依据。 1.2 知识特征库及面部识别引擎的建立 在前述面部模型建立完成后,需要建立相应的知识库以及面部识别引擎方可进行身份的识别。可经过大量数据的采集和分析后建立知识库,并根据知识库的特点建立相应的识别引擎。此识别引擎对外开放,在本系统中提供其它外来程序的调用接口,其它系统能够通过本接口实现识别引擎的调用实现对于面部图形的识别,从而达到识别引擎的可复用性。在技术条件允许的情况下,提供知识库的智能训练以及半自动构建支持。 1.3 面部图像的采集与预处理 本系统中采用了预留API接口,利用USB图形捕获设备采集数据图像。经过USB设备的捕获,使用JMF(Java Media Framework)来处理已捕获的图像数据,对捕获的图像进行面部图行检测和实时定位跟踪。

opencv函数目录-Cv图像处理

目录 1 梯度、边缘和角点 1.1 Sobel 1.2 Laplace 1.3 Canny 1.4 PreCornerDetect 1.5 CornerEigenValsAndVecs 1.6 CornerMinEigenVal 1.7 CornerHarris 1.8 FindCornerSubPix 1.9 GoodFeaturesToTrack 2 采样、插值和几何变换 2.1 InitLineIterator 2.2 SampleLine 2.3 GetRectSubPix 2.4 GetQuadrangleSubPix 2.5 Resize 2.6 WarpAffine 2.7 GetAffineTransform 2.8 2DRotationMatrix 2.9 WarpPerspective 2.10 WarpPerspectiveQMatrix 2.11 GetPerspectiveTransform 2.12 Remap 2.13 LogPolar 3 形态学操作 3.1 CreateStructuringElementEx 3.2 ReleaseStructuringElement 3.3 Erode 3.4 Dilate 3.5 MorphologyEx 4 滤波器与色彩空间变换 4.1 Smooth 4.2 Filter2D 4.3 CopyMakeBorder 4.4 Integral 4.5 CvtColor 4.6 Threshold 4.7 AdaptiveThreshold 5 金字塔及其应用 5.1 PyrDown 5.2 PyrUp 6 连接部件 6.1 CvConnectedComp

计算机图形学课程设计报告交互式绘图系统

课程设计报告 课程名称计算机图形学 课题名称交互式绘图系统 专业计算机科学与技术 班级 学号 姓名 指导教师刘长松曹燚 2012年10 月9 日

湖南工程学院 课程设计任务书 课程名称计算机图形学 课题交互式绘图系统 专业班级 学生姓名 学号 指导老师刘长松曹燚 审批 任务书下达日期2012年9月15 日任务完成日期2012 年10月9 日

一、设计内容与设计要求 1.设计内容: 用橡皮法实现交互式绘图系统。 2.设计要求: 在屏幕上可以选择不同的命令、来实现不同基本图形的绘制。完成橡皮筋直线,橡皮筋圆,橡皮筋矩形框,多边形裁剪和3阶B样条曲线的作图,且要有比较友好的界面。 3.算法提示: 首先在屏幕上画出菜单和绘图窗口,显示鼠标。点击相应菜单,点击鼠标,移动鼠标,获取鼠标移动相对位置,画出相应图形。 相关变量定义: #define _MOUSE鼠标#define CIRCLE 1圆 #define LINE 2直线#define RECTANGLE 3矩形#include "stdio.h" #include "string.h" #include"graphics.h" #include"math.h" #include union REGS inreg,outreg; struct SREGS sr; 相关函数: void meun(int x,int y,char *str) { setcolor(8); outtextxy(x+5,28,str); setcolor(15); line(x,22,x,40); line(x,22,y,22); setcolor(8); line(x,40,y,40); line(y,22,y,40); }

图像管理方案计划opencv代码

/. #include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

画图工具可行性报告

Java实训课程设计报告Windows画图工具 专业:计算机科学与技术班级:11092311 姓名:曾思哲 学号:11923110

2014年6月

项目简介

Windows画图工具的设计 第1章需求分析 1.1 项目背景 随着社会的不断发展,人们对画面要求越来越高,对画图工具的软件提出了更高的要求。 画图工具的软件可以让用户更加节省时间,可以从其他文件找出一些图片修改一下就可以使用,比起传统的手工的画图来说,不单单是节省时间而且画面要好的多,保存起来也比较方便,下次在用的时候一找就出来了。在比如画面的修改在这套软件上我们可以直接使用彩色,使画面更直观,而且还可以修改,画图的软件现在应用于各行各业,这款软件特别适合教学用,学生画图也是比不可缺少的。 1.2 需求分析 需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户问题的分析,确定系统的功能需求。这个步骤是对理解需求的升华,直接关系到该系统的质量。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通机制,因此,系统的需求分析也应该是开发人员和用户或客户一起完成的。 1.2.1画图板的性能要求 (1) 统一处理的准确性和及时性。 (2) 软件的开放性和可扩充性。 (3) 软件的易用性和易维护性。 1.2.2画图板的功能分析 我们作的是Windows画板,再设计时应该考虑到用户的需要和画图的习惯。所以我们需求分析的主要任务就是来了解用户画图时的习惯。尽量让用户满意。在此我们是先设计一个大概的程序模型让别人试试我的画图板。

第2章概要设计 2.1 软件设计 1.1.1 本软件是设计一套在windows平台下的画图工具,主要用于主要用于画图、打开图画类的页面修改并保存成用户需要的格式。系统采用C/S结构,主要用于客户端,供客户学习、工作使用,本软件提供良好的界面,操作简单。 第3章详细设计 3.1 模块设计 该系统由4个模块构成,分别是工具模块、储存模块、颜色模块、帮助模块。 ●工具模块 画笔(PencilTool)、格式刷(BrushTool)、喷墨工具(AtomizerTool)、橡皮(EraserTool)、直线(LineTool)等主要用于不同情况的使用,在面板上方便用户的使用。 ●储存模块 ①判断当前画板是否保存(MyImage)。 ②设置多种存储的格式供用户选择,增加文件过滤器(addFilter)。 ③存储路径可以设置默认的。 ●颜色模块 通过创建颜色选择器(ColorChooser),来让用户获取颜色,供用户使用。 ●帮助模块 系统帮助文档和软件的声明。 3.2 功能设计 主要功能如下: 1、画笔 PencilTool这个类继承于AbstractTool类,PencilTool类中有个对象Tool 用户通过点击画板上的图标来获取画笔,它的功能让用户用来画出各种图形。 2、格式刷子 BrushTool这个类继承于AbstractTool类,它的功能让用户画出更好的图形。

基于OpenCv的图像识别

基于2DPCA的人脸识别算法研究 摘要 人脸识别技术是对图像和视频中的人脸进行检测和定位的一门模式识别技术,包含位置、大小、个数和形态等人脸图像的所有信息。由于近年来计算机技术的飞速发展,为人脸识别技术的广泛应用提供了可能,所以图像处理技术被广泛应用了各种领域。该技术具有广阔的前景,如今已有大量的研究人员专注于人脸识别技术的开发。本文的主要工作内容如下: 1)介绍了人脸识别技术的基础知识,包括该技术的应用、背景、研究方向以及 目前研究该技术的困难,并对人脸识别系统的运行过程以及运行平台作了简单的介绍。 2)预处理工作是在原始0RL人脸库上进行的。在图像的预处理阶段,经过了图 象的颜色处理,图像的几何归一化,图像的均衡化和图象的灰度归一化四个过程。所有人脸图像通过上述处理后,就可以在一定程度上减小光照、背景等一些外在因素的不利影响。 3)介绍了目前主流的一些人脸检测算法,本文采用并详细叙述了Adaboost人脸 检测算法。Adaboost算法首先需要创建人脸图像的训练样本,再通过对样本的训练,得到的级联分类器就可以对人脸进行检测。 4)本文介绍了基于PCA算法的人脸特征点提取,并在PCA算法的基础上应用了 改进型的2DPCA算法,对两者的性能进行了对比,得出后者的准确度和实时性均大于前者,最后将Adaboost人脸检测算法和2DPCA算法结合,不仅能大幅度降低识别时间,而且还相互补充,有效的提高了识别率。 关键词:人脸识别 2DPCA 特征提取人脸检测

2DPCA Face Recognition Algorithm Based on The Research Abstract:Face recognition is a technology to detect and locate human face in an image or video streams,Including location, size, shape, number and other information of human face in an image or video streams.Due to the rapid development of computer operation speed makes the image processing technology has been widely applied in many fields in recent years. This paper's work has the following several aspects: 1)Explained the background, research scope and method of face recognition,and introduced the theoretical method of face recognition field in general. 2)The pretreatments work is based on the original ORL face database. In the image preprocessing stage, there are the color of the image processing, image geometric normalization, image equalization and image gray scale normalization four parts. After united processing, the face image is standard, which can eliminate the adverse effects of some external factors. 3)All kinds of face detection algorithm is introduced, and detailed describing the Adaboost algorithm for face detection. Through the Adaboost algorithm to create a training sample,then Training the samples of face image,and obtaining the cascade classifier to detect human face. 4)This paper introduces the facial feature points extraction based on PCA ,and 2DPCA is used on the basis of the PCA as a improved algorithm.Performance is compared between the two, it is concluds that the real time and accuracy of the latter is greater than the former.Finally the Adaboost face detection algorithm and 2DPCA are combined, which not only can greatly reduce the recognition time, but also complement each other, effectively improve the recognition rate. Key words:Face recognition 2DPCA Feature extraction Face detection

基于opencv对图像的预处理

基于opencv 对图像的预处理 1.问题描述 本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。 2.模块划分 此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示: 图一、各个模块关系图 调用 调用 调用 调用 滑动控制模块 对比度和亮度调节模块 饱和度调节模块 缩放调节模块 旋转调节模块

滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。 3.算法设计 (1)滑动控制: 滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能; (2)对比度和亮度的调节: 对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度; (3)饱和度的调节: 饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变; (4)旋转的调节: 旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小; (5)缩放的调节: 首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子; 4.函数功能描述 (1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.sodocs.net/doc/9710755047.html,/technology/computing/opencv/?软件下载: https://www.sodocs.net/doc/9710755047.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

Java画图板课程设计报告

目录 1 引言................................................................................................... 错误!未定义书签。 课程设计选题 .................................................................................. 错误!未定义书签。 课程设计的目的 .............................................................................. 错误!未定义书签。 本选题的设计背景.......................................................................... 错误!未定义书签。 2 需求分析 .............................................................................................. 错误!未定义书签。 功能需求......................................................................................... 错误!未定义书签。 软件开发运行环境........................................................................ 错误!未定义书签。 3 总体设计 .............................................................................................. 错误!未定义书签。 软件结构设计 ................................................................................ 错误!未定义书签。 结构设计................................................................................. 错误!未定义书签。 软件功能模块及主要类设计 ......................................................... 错误!未定义书签。 功能描述 ................................................................................... 错误!未定义书签。 总体结构图............................................................................... 错误!未定义书签。 主要类设计............................................................................... 错误!未定义书签。 4 详细设计与实现.................................................................................. 错误!未定义书签。 主界面............................................................................................. 错误!未定义书签。 主界面功能设计....................................................................... 错误!未定义书签。 主界面设计............................................................................... 错误!未定义书签。 主界面主要代码....................................................................... 错误!未定义书签。 菜单栏............................................................................................. 错误!未定义书签。 菜单栏功能设计....................................................................... 错误!未定义书签。 菜单栏界面设计....................................................................... 错误!未定义书签。 菜单栏主要代码....................................................................... 错误!未定义书签。 工具栏............................................................................................. 错误!未定义书签。 工具栏功能设计....................................................................... 错误!未定义书签。 工具栏界面设计....................................................................... 错误!未定义书签。 工具栏主要代码....................................................................... 错误!未定义书签。

opencv最基础的图像处理

openCV——几个实用函数 2010年12月20日星期一 09:18 1. cvSmooth:各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ); src 输入图像. dst 输出图像. smoothtype 平滑方法: . CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数cvIntegral 计算积分图像。 . CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1.param2). . CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 . CV_MEDIAN (median blur) - 对图像进行核大小为 param1×param1 的中值滤波 (i.e. 邻域是方的). . CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 平滑操作的第一个参数. param2 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果 param2的值为零,则表示其被设定为param1。 param3

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有sigma 计算 (以保证足够精确的操作). 函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像. 2.IplImage结构 由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。IplImage结构具体定义如下: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/

Java画图软件设计报告

佛山科学技术学院 《可视化编程技术》课程设计报告 画图软件设计 学生姓名:周敏婷 学号:2011914123 年级专业:11级教育技术学2班 指导老师:容汝佳 学院:教育科学学院 广东★佛山 提交日期:2013年6月

目录 1. 前言 (2) 2.概要设计 (3) 2.1 开发环境 (3) 2.2 画图软件功能 (3) 2.3 界面设计 (3) 2.4 类的框架结构图 (4) 3. 详细设计 (4) 3.1 使用的JAVA类的说明 (4) 3.2 类的主要方法 (5) 3.2.1 颜色选择器 (5) 3.2.2 控制画笔样式 (5) 3.2.3 选取颜色按钮的监听件类 (6) 3.2.4 设计总体认识 (6) 3.2.5 程序流程图 (7) 4. 运行结果 (7) 5. 测试分析 (8) 5.1 程序运行情况 (8) 6. 源程序 (8) 参考文献 (14) 设计总结 (14)

摘要:该程序是一个图形界面的简单的java画图软件,具有良好的界面,使用人员能快捷简单地进行操作。该画图软件操作较为简单,只需要一直按着左键就能根据你鼠标移动的方面,画出你想要的图案。你也可以选择你自己想到的颜色和画笔的粗细。而且可以显示你当前的画笔的状态。界面为灰白对称。是一个非常简单的作图工具,让人能轻松上手。 关键字:java,画图类,方法,事件 1 前言 随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的画图工具,可以实现简单的画图作图功能,满足日常基本的工作学习和娱乐需要。 Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。 Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。 Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java 语言去掉了C++语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。

相关主题