浅谈OpenCV计算机视觉库

时间:2022-09-24 10:45:11

浅谈OpenCV计算机视觉库

摘 要:用C、C++、Java等计算机语言编一个图像识别程序,常常需要借助一些图像处理的工具库,OpenCV就是其中之一,使用OpenCV要比使用计算机应用软件困难,需要前期复杂的准备工作,如果了解了OpenCV与其他图像处理应用软件的区别、学习OpenCV的基础、运行环境、图像操作原理以及OpenCV文档包含的内容,学习和使用OpenCV就会容易很多。

关键词:图像处理 OpenCV C C++

中图分类号:TP31 文献标识码:A 文章编号:1672-3791(2016)10(a)-0007-02

图像识别技术已经应用到生活中的许多方面。文字识别系统,直接把图片上的文字扫描成文本文档格式。人脸识别技术已经用到了智能手机之中,现在的手机解锁可以直接使用人脸识别。指文图像识别的应用更为广泛,如办理身份证、入学考试、驾照等用来确认身份。百度、Google、苹果等公司研究的无人驾驶汽车,将该技术用于对障碍物、路标、行人及其他车辆的判断。道路交通监控系统中,系统自动检索违规车辆,并对车辆的车牌等信息进行识别。通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号,目前,字母和数字的识别率可达96%,汉字的识别率可达95% [1-2]。所有的这些都用到了图像识别功能,要编写图像识别程序使用OpenCV是一个不错的选择。

1 OpenCV简介

OpenCV是Intel公司于1999年推出的一种面向图像处理的开源计算机视觉库,其中,OpenCV是Open Source Computer Vision Library的缩写,如今由Willow Garage提供支持,其中包括了3个版本OpenCV1、OpenCV2、OpenCV3,除了OpenCV1现在很少使用外,其他两个版本已经有了很多改进的版本。OpenCV有开源的函数库,可以满足不同领域的图像处理需求,使用时以函数调用的形式提供给用户,也可以对其代码进行改进,便于用户实验教学或程序开发使用。

2 OpenCV的特点

(1)开源。OpenCV是一个开源的图像处理函数库,无论是商业应用,还是做科学研究,完全是免费的,与Linux类似它的源代码也是公开的,这样程序的安全性就得到保障,OpenCV的函数库是用C语言和C++语言进行编写的,源代码可读性比较高,发现其中不足之可以自行进行修改,避免编译后的可执行文件出现漏洞。

(2)跨平台。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Windows、Linux、Mac OS和嵌入式等操作系统上[3]。

(3)应用领域广。OpenCV图像处理可以使用到多个领域当中,包括生物医学、工业、军事安防、机器视觉、航空航天等。目前已知OpenCV编程系统在航空航天定位、卫星地图绘制、工厂大规模生产视觉检测等方面得到了广泛的应用,同时对于无人飞行器的视觉捕捉技术也有极大的帮助[4]。

(4)支持多种语言进行开发。OpenCV中包括了多种编程语言的接口,其中支持的编程语言包括C、C++、C#、Java、Python等。

3 OpenCV与图像处理应用软件

在计算机学习中也会学到一些其他的图像处理软件,如Photo Shop、Windows画图工具等在计算机中使用的图像处理工具。在手机中有一个比较流行的软件,在拍好照片后可以对个人照片进行智能美化,这些软件都是应用软件缺少编程需要的接口,这些软件处理图像后只是给出结果,无法取到程序处理所需要的中间参数,只能局限于最后的结果展示,如果只是单纯的图像制作, Photo Shop类的图像处理工具已经足够了。但是对于图像识别、机器视觉等,需要对图像内容做出判断,用类似于Photo Shop这样的图像处理软件就无法完成了,因为无法集成到所编写的程序当中。OpenCV是一个图像处理函数库,其中包涵了对于计算机操作系统和计算机语言编译平台支持的API接口以及源码库,可以在编写的程序中去处理图像,不但可以得到图像处理后的结果,还可以对图像中间的处理过程进行控制,可以对图像中的内容用自己编写的程序代码进行判定,实现识别操作。

4 学习OpenCV的基础

C和C++语言在工科类专业中一般设置必修课程,C语言常作为一门基础的编程语言来教,有的学生觉得C比较容易,有的学生感觉比较难,这个取决于每个人对计算机语言的理解能力与对计算机语言的兴趣,C和C++的区别在于C++增加了类,支持面向对象编程。新版OpenCV函数库是基于C++的,打开源代码的文件夹可以看到许多以.cpp结尾的C++代码文件,所以对于C和C++的掌握情况直接关系到对OpenCV的学习。

5 OpenCV的运行环境

在学习每种计算机语言之前都要对每种计算机语言的IDE(Integrated Development Environment,集成开发环境)进行安装和配置,集成开发环境不只是用来编辑程序代码,还包括了对代码的编译、调试与运行等。如Java语言,在Windows操作系统中Java语言最简单的编辑环境是记事本,对于Java的编译与运行需要用到命令窗调用所安装JDK(Java Development Kit,Java开发包)中的编译程序与运行环境,如果是集成的IDE,如Eclipse、MyEclipse等,点击IDE上的运行或是调试按钮,就可以在IDE中的结果输出窗口上直接查看运行结果。OpenCV是用C和C++语言所编写的图像处理函数库,它没有自己独立的IDE,所以它需要借助其他编程语言的IDE进行编写和调用,如Microsoft Visual Studio、QT Creator等。

配置开发环境是学习OpenCV中重要的一步,但是这个过程相对于初学者来说有些复杂。首先,要从网上下载并安装计算机语言的开发环境,如微软的Visual Studio、QT集成开发环境等。其次,下载并安装OpenCV的安装包,安装OpenCV是一个解压的过程。下一步,就是对开发环境的配置,其中要对系统变量、包含目录、附加依赖项进行配置。然后进行调试运行。在对开发环境配置时,为保证OpenCV库与本地开发环境兼容性更好,最好使用CMaker(Cross Platform Make)在本地环境中对OpenCV源代码重新编译。

6 OpenCV中的Hello World

在学习C或是java语言时,常常会有一个重要的标志就是‘Hello World!’,标志着系统配置完成并且整个IDE环境运行正常,编译系统成功的编译了所写的代码,并且在操作系统中执行成功。OpenCV中这个标志有所不同,它的‘Hello World!’是在IDE中写好代码后,调用OpenCV中的函数打开一幅代码中指定的图片并显示到新建的窗口中,标志着IDE中的参数是正确的,这是进行图像操作的重要一步。

7 OpenCV图像像素操作

对于数值的计算是第一步一般输出一个结果,在学任何一门计算机语言时会有一个很好的例子“计算器”,那图像如何去表示?其实图像是多个结果的一个集合,就像在C语言中打出星号所组成的菱形,每一个星号可以比喻成一个图像中的像素点。对于图像处理过程中常常见到的有3种:第一种,RGB图像,彩色的图像,每个像素点由3个数值表示。第二种,灰度图像,像以前的黑白电视机,每个像素点由一个数值就可以表示。第三种,二值图像,每个像素点由一个数值表示。在OpenCV中有多种方法可以对图像进行操作,其中比较方便的就是利用cv::Mat类,对图像进行打开、显示、修改和保存,这也是进行图像操作的重要一步。

8 OpenCV的文档

大家在OpenCV官网提供的文档中可以得到更多帮助。在OpenCV的文档中包括了对组件结构的介绍,了解OpenCV的组件结构对学习OpenCV是十分有利的,该介绍包括了一系列的动态或静态库,如矩阵数组的定义、图像处理模块包含的内容、视频分析所需要的算法、基本的多视觉算法、外部特征的检测类、物体的检测类、UI类的使用、图像算法的硬件加速等,在编写代码时可以查找其类中对象所包含成员和方法。一些OpenCV图书所带的光盘中或互联网上网友提供的图像处理代码,由于编程使用的操作系统或编译环境不同,有些代码会包含未知的头文件或者缺少头文件,代码本身并没有错误,但总是编译出错,了解了这些知识后在编程时,有利于定位在程序中所引用的文件所属的位置,从而有效地处理文件引用出现的问题。

无论对什么样的物体进行识别,图像识别过程基本是不变的,包括:图像预处理、图像分割,特征提取、判断匹配、输出结果。图像预处理中会用到图像的灰度化、图像的二值化、去除图像的噪声等算法。特征提取中会用到图像变换、图像边缘检测等算法。判断匹配中用到直方图、投影等算法。图像分割有3种:基于阈值的分割、基于区域分割、基于边缘的分割[5]。在OpenCV的文档中都详细提供了基本算法类的定义与方法,通过OpenCV的代码库中的基本算法类或几个基本算法类的组合可以实现以上所列算法的所有功能。

9 结语

据统计,一个人获取的信息大约有75%来自视觉 [6]。在工业4.0的时代里机器也需要有自己的视觉系统,基于图像处理的机器视觉在人工智能领域会得到更广泛的应用,如:无人驾驶汽车、智能机器人、智能安防系统等。OpenCV是一个进入这些行业的重要工具之一,图像处理的学习过程是一个循序渐进的过程,希望学习者在OpenCV的基础上提高对于图像处理的认识及对图像处理的技术水平。

参考文献

[1] 姚楠,耿奇.基于MATLAB GUI 的车牌自动识别系统设计[J].软件,2016,37(3):44-46.

[2] 李珊珊,刘纯.基于FPGA 车牌识别系统的设计与实现[J].软件,2012,33(3):72-74.

[3] (加)Robert Laganière,著.OpenCV计算机视觉编程攻略[M].2版.相银初,译.北京:人民邮电出版社,2015.

[4] 陈雪娇.基于OpenCV的计算机视觉技术研究[J].电脑知识与技术,2015(30):137-138,141.

[5] 张家怡.图像识别的技术现状和发展趋势[J].电脑知识与技术,2010(21):6045-6046.

[6] 贾永红.数字图像处理[M].武汉:武汉大学出版社,2003:1.

上一篇:工业案例项目教学法在机电专业教学中的应用研... 下一篇:10 kV配网电缆故障及防范措施探讨