OpenCV技术在数字图像处理中的应用

opencv简介 开放源代码的计算机视觉类库opencv由英特尔公司位于俄罗斯的研究实验室开发,它是一套可以免费获得的由一些c函数和c++类所组成的库,用来实现常用的图像处理以及计算机视觉算法。与英特尔公司所开发的另外一个图像处理库ipl相比,opencv主要针对图像的一些高级处理,例如目标分割、运动分析与跟踪、特征检测以及三维重建等。
opencv的特点 opencv是开发的c源码,基于intel处理器指令集开发的优化代码,具有统一的结构以及功能定义、强大的矩阵计算能力、方便灵活的接口,而且同时支持windows、linux和macos平台等。
*开放的源代码,对个人以及商业的开发完全是免费的;
*支持大多数的c和c++编译器,可以在不同的平台之间进行移植,例如:vc++6.0、vc.net2005、vc.net2008以及c++builder等;
*可移植,跨平台性好,可以在windows,linux和macos平台上运行;
*opencv所有的算法都是基于封装于ipl的具有高灵活性的动态数据结构,并且有一半以上的函数在设计与汇编时针对intel处理器指令集将代码进行了优化;
*具有强大的图像以及矩阵的计算能力,大大减少了开发者的工作量,有效提高了程序开发的效率以及程序运行的可靠性;
*具有方便灵活的接口,包含了300多个c/c++函数,代码效率高;支持高层api;可以独立使用,也可以使用外部库。
opencv的模块 本文采用的是opencv2.4版本,包括以下几个模块,具体功能是:
*cv模块:它是主要的opencv函数,包括图像处理、运动分析与对象跟踪、结构分析、模式识别、相机标定以及三维重建等;
*cvaux模块:包括一些三维跟踪、pca、hmm等函数;
*cxcore模块:该库包括了所有opencv运行时的一些最基本的数据结构、矩阵、数组的基本运算,包括出错处理的一些基本函数;
*ml模块:机器学习库,包括一些用于分类、回归和数据聚类的类和函数;
*highgui模块:图像界面函数,包括图像用户窗口gui,图像视频i/o,系统调用函数等。
数据存取方式 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
opencv 在不同编译环境下的配置 opencv在不同的编译环境中必须进行正确的配置才能运用,但是在不同的编译环境中的配置有所不同。
3.1c++builderx 环境下配置
opencv 新发布的版本中取消了对c++builderx 的支持,但是仍然有一个脚本文件utils\gen_make.py 可以通过生成文件makfle.bce‘s 来编译。本文介绍通过转换静态链接库的方法在c++builderx 环境下进行配置。
opencv 的库在msvc 中可以直接使用,但是在bcb环境下不能直接使用。必须进行转换。在bcb 安装目录的bin 目录下的coff2omf.exe 文件,可以将msvc 的静态库转换成c++builderx 类的静态库。具体方法为:
[path ]msv c 库文件(*.lib) [path:]c++builder 库文件(*.lib)coff2omf
接着对opencv 进行环境配置。打开bcb,选择菜单project 中的options,在对话框中选择directories/conditionals 标签,在inc lude path 中添加opencv 的头文件所在的路径。p ]时在librarypath中添加用上述方法转换而来的静态链接文件的路径。
最后在c++builder工程中加入opencv的库文件。选择菜单view中的projectmanager,选择add添加用上述方法转换而来的静态连接文件。这样就完成了再c++builderx环境下配置工作。
3.2 msvc++6.0 环境下配置周
首先需要在安装opencv时将其加入到系统变量中。然后配置msvc++6.0,点击菜单tools-》options-》directories,先设置lib 路径,选择library files,在下方填入路径--opencv \lib; 然后选择include fles,在下方填入路径:---opencv \excore \include;--\opencv \er\ inelude;--\opencv \evaux\ inelude---\opencv \ml\ in lude;--opencv \otheribshighgui 市后需要对每个创建的工程进行项目配置,点击菜单:proect-+settings,然后将settingfor 选为all configurations,然后选择右边link标签,在object/ library modules 附加上excore.lib,cv.lib,ml.lib,evaux.lib,highgui.lib。过样就可在msvc++6.0 环境下运用opencv 了。
3.3 vs.net环境下的配置
打开.net环境,选择“项目“-》属性,选择“c/c ++”-》常规-》附加包含日录,在其中加入下面路径:.opencvinclude.。.opencvotheibhgh-gui然后选择“链接器“-》常规-》附加库目录,在附加库目录中加入如下路径:。-\0pencvlib;最后选择“链接器“-》输入-》附加依赖項,加入如下几项:ev.lib,highgui.lib.经过上述配置可以在.net 环境中使用opencv 相函数了。
  运用opencv处理图像举例 下面例举几个实例说明opencv在数字图像处理中的实际运用。这些实例均在borlandc++6.0环境中实现。
4.1困像的载入
在处理图像之前,首先要做的就是读取图像的相关信息,运用opencv的函教,可以方便地读入和显示图片,代码如下:
illmage *img = ,,loadlmae(”lenajpg“.0;
evnamedw indow(”original“.0;
cvshowlmage(”original.img
《 wwaitkey(0);
第一句功能为读入图像;第二句功能为建立一个名字为“original”的窗口,“o”表示窗口大小由系统自动给定;第三句功能是将图像在“original“窗口中显示;第四句功能为延迟窗口显示时间。按回车键会关闭,但是如果没有这一句,用像会一闪之后马上消失,则会观察不到具体的图像,如图1所示,
4.2 图像边缘检测
边缘检测是图像处理和计算机视觉中的基本问题,常用的边缘检测经典算子有roberts算子、prewitt 算子、sobel 算子、拉普拉斯算子和camny 算子。opencv 提供了evsobel 函数、evlaplace 函数、evcamny函数进行边缘检测。下面以cvcanny函数进行举例。在上节中图像载入的基础上,其边缘检测的代码为:
ipllmage *result_img = cvcreatelmage(cvsize(img-》w idth,img-》height),ipl._depth_8u,1);
cvcanny img.result_img.threshold 1,threshold2);
cv namedw indow(”result“,0);
cvshow image(”result“,result_img);
第一句功能是创建一副与img同样大小、通道数为1的用像;第二句的功能为对图像进行边缘检测,threshold1与threshold2中的小园值用来控制边缘检测,大国值用来控制强边缘的初始化分割,最后结果显示在“resul”窗口中。如图2所示.
4.3 人脸检测定位
人脸检测定位技术是一种比较高级的应用,如果不借助任何集成软件。需要研究人员进行分析编程实现的话那将是一个很繁琐也必将困难的工作。现利用opencv中的cvhaardetectobjects函数检测图像中的目标能快速实现对人脸的定位。如图3所示。

液晶电视的常见接口
地磁传感器是什么
大电流弹片微针模组,可轻松攻克手机电池的测试难题
通信直流电源输入防浪涌电路
从各方面来比较Switch和Switch lite的区别
OpenCV技术在数字图像处理中的应用
不同相线零线可以共用吗
深度学习在计算机视觉领域的应用一览
CES2012:数码影像11日亮相新品总结
三菱PLC的通讯与编程,附实际案例
智能家居如何实现节能?
又破吉尼斯记录 华为mate9要逆天:热销全网断货,加价到七千!
如何为AGV搬运机器人选择合适的电机
安立公司MP1900A信号质量分析仪支持新PCIe 6.0标准
中国制造的全球首款多阵列忆阻器存算一体系统问市
激光雷达系统正在进入各种其他应用领域
大联大诠鼎集团推出基于Richtek产品的65W PD快充方案
iPad 2升级版采用32纳米芯片:续航时间提升16%
回顾华为开发者大会亮点与任正非答外媒记者问
油浸式试验变压器注意事项
s