您当前的位置:首页 > 新闻 > 科技

计算机视觉软件库OpenCV的开发基础介绍

时间:2020-06-26 11:53:14  来源:  作者:

当下人工智能的发展是前所未有的迅猛,而计算机视觉(Computer Vision)无疑是人工智能一个非常重要的分支,计算机视觉的发展也成为了很多科研人员和业界开发人员聚焦的热点。我们常说的无人驾驶、智能安防、人脸识别、文字识别、以图搜图、VR/AR、3D重构等等都是以计算机视觉做为技术基础的应用实践。

 

在计算机视觉项目的开发中,OpenCV作为最大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在linux/windows/mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了JAVAPython、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。

本文主要介绍OpenCV开发的一些基础知识以及入门上手的方法。

1、OpenCV的起源背景

OpenCV诞生于Intel研究中心,其目的是为了促进CPU密集型应用。为了达到这一目的,Intel启动了多个项目,包括实时光线追踪和三维显示墙。一个在Intel工作的OpenCV作者在访问一些大学时,注意到许多顶尖大学中的研究组(如MIT媒体实验室)拥有很好的内部使用的开放计算机视觉库(在学生们间互相传播的代码),这会帮助一个新生从一个很高的起点开始ta的计算机视觉研究。这样一个新生可以在以前的基础上继续开始研究,而不用去从底层编写基本函数。

因此,OpenCV的目的是开发一个普遍可用的计算机视觉库。在Intel的性能库团队的帮助下,OpenCV实现了一些核心代码以及算法,并发给Intel俄罗斯的库团队。这就是OpenCV的诞生之地:在与软件性能库团队的合作下,它开始于Intel的研究中心,并在俄罗斯得到实现和优化(这再一次验证了俄罗斯程序员的卓越之处!)。

俄罗斯团队的主要负责人是俄罗斯人Vadim Pisarevsky,他负责管理项目、写代码并优化OpenCV的大部分代码,在OpenCV中很大一部分功劳都属于他。跟他一起,Victor Eruhimov帮助开发了早期的架构,Valery Kuriakin管理俄罗斯实验室并提供了很大的支持。在开始时,OpenCV就定下了以下三大目标:

(1)为基本的视觉应用提供开放且优化的源代码,以促进视觉研究的发展。能有效地避免“闭门造车”。

(2)通过提供一个通用的架构来传播视觉知识,开发者可以在这个架构上继续开展工作,所以代码应该是非常易读的且可改写。

(3)本库采用的协议不要求商业产品继续开放代码,这使得可移植的、性能被优化的代码可以自由获取,可以促进基于视觉的商业应用的发展。

这些目标说明了OpenCV的缘起。计算机视觉应用的发展会增加对快速处理器的需求。与单独销售软件相比,促进处理器的升级会为Intel带来更多收入。这也许是为什么这个开放且免费的库出现在一家硬件生产企业中,而不是在一家软件公司中。从某种程度上说,在一家硬件公司里,在软件方面会有更多创新的空间。就像华为这样的网络通讯设备公司,与硬件相配套的软件也是非常的强大!

2、OpenCV简介

OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它是轻量级的,而且是高效的,由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ruby等的支持。

计算机视觉软件库OpenCV的开发基础介绍

OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库。 无论你是做科学研究,还是商业应用,OpenCV都可以作为你理想的工具库,因为对于这两者,它完全是免费的。

同时,由于计算机视觉与机器学习密不可分,该库也包含了比较常用的一些机器学习算法,比如图像识别、机器视觉在安防领域有广泛的应用。但很少有人知道,在航拍图片、街道图片(例如google street view)中,要严重依赖于机器视觉的摄像头标定、图像融合等技术。

近年来,在入侵检测、特定目标跟踪、目标检测、人脸检测、人脸识别、人脸跟踪等领域,OpenCV可谓大显身手,而这些,仅仅是其应用的冰山一角。

如今,来自世界各地的各大公司、科研机构的研究人员,共同维护支持着OpenCV的开源库开发。这些公司和机构包括:微软,IBM,索尼、西门子、google、intel、斯坦福、MIT、CMU、剑桥。

计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:

(1)研究代码(慢,不稳定,独立并与其他库不兼容)

(2)耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)

(3)依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状。

如果能有一个统一的标准API,将简化计算机视觉程序和解决方案的开发,而OpenCV致力于成为这样的标准API。

OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度(注:OpenCV 2.0版的代码已显著优化,无需IPP来提升性能,故2.0版不再提供IPP接口)。下图为OpenCV与当前其他主流视觉函数库的性能比较。

计算机视觉软件库OpenCV的开发基础介绍

3、OpenCV内部构成

OpenCV主体分为五个模块,其中四个模块如下所示:

计算机视觉软件库OpenCV的开发基础介绍

OpenCV的CV模块包含基本的图像处理函数和高级的计算机视觉算法。ML是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI包含图像和视频输入/输出的函数。CXCore包含OpenCV的一些基本数据结构和相关函数。

目前,OpenCV的最高版本为OpenCV4.3.0。其中OpenCV3.0和OpenCV2.0的版本相比,改动比较大,主要改动如下:

(1)大体上保留了OpenCV 2经典的C++和Python编程接口风格。其中,Python接口大大增强,也加入了Python 3.x的支持。一般来说,以前版本的程序只要做少数修改,就可以使用OpenCV 3了。另外还改善了Java接口,并且加入了MATLAB支持。

(2)架构调整。图片、视频编解码从highgui模块分离出来,组成了imgcodecs和videoio。原先的OpenCL模块ocl事实上与其 它模块融为一体,而CUDA加速模块gpu分解成了数个以cuda开头的模块。此外,除了官方支持的OpenCV代码,还有一些自发贡献的内容、不稳定的 内容,或者版权尚存争议的内容,都放到了新的仓库opencv_contrib中。

(3)更多新算法。新版本包括了TLD、鱼眼镜头模型等全新算法,还包括了一些更高层次可以直接拿来用的高级封装,比如汽车检测等。

(4)引入T-API,使OpenCL加速更容易。目前可以参考OpenCV源代码中T-API的范例。可以发现,开启和关闭OpenCL加速,只需要一个语句就够了。这也就是为什么ocl模块会消失了吧。

(5)更多指令集优化。除了之前为Intel CPU做的优化以外,OpenCV 3还容纳了ARM平台NEON指令集的支持。通过英特尔的帮助,OpenCV 3对x86和x64平台默认使用IPP。下图是OpenCV3.0中部分函数得到加速的示意图。

计算机视觉软件库OpenCV的开发基础介绍

下面主要介绍OpenCV3.0版本的东西。

OpenCV3.0的sources文件结构:

(1)3rdparty/,包含第三方的库,比如视频解码用的 ffmpeg,jpg、png、tiff等图片的开源解码库。

(2)Apps/,包含进行 haar 分类器训练的工具,opencv 进行人脸检测便是基于 haar 分类器。如果你想检测人脸以外的图片,千万不要错过这几个工具。

(3)cmake/,包含生成工程项目时 cmake 的依赖文件,用于智能搜索第三方库,普通开发者不需要关心这个文件夹的内容。

(4)data/,包含 opencv 库以及范例中用到的资源文件,haar 物体检测的分类器位于haarcascades子文件中。

(5)doc/,包含生成文档所需的源文件以及辅助脚本。

(6)include/,包含入口头文件。opencv 子文件夹中是 C 语言风格的API,也就是《Learning OpenCV (第一版)》中描述的API函数,官方将逐渐淘汰 C 风格函数,因此我不推荐大家使用该文件夹中的头文件。opencv2 子文件中只有一个 opencv.hpp 文件,这是 cv2 以及 cv3 推荐使用的头文件。

(7)modules/,包含核心代码,opencv 真正的代码都在这个文件夹中。opencv 从2.0开始以模块的方式组织各种功能,近两年模块的数量增长得很快,后面我会依次介绍每个模块的作用。

(8)platforms/,包含交叉编译所需的工具链以及额外的代码,交叉编译指的是在一个操作系统中编译供另一个系统使用的文件。

(9)samples/,范例文件夹。

常用模块介绍:

(1)androidcamera/,仅用于android平台,使得可以通过与其他平台相同的接口来控制android设备的相机。

(2)core/,核心功能模块,定义了基本的数据结构,包括最重要的 Mat 类、XML 读写、opengl三维渲染等。

(3)imgproc/,全称为 image processing,即图像处理。包括图像滤波、集合图像变换、直方图计算、形状描述子等。图像处理是计算机视觉的重要工具。

(4)imgcodec/,负责各种格式的图片的读写,这个模块是从以前的 highgui 中剥离的。

(5)highgui/,高级图形界面及与 QT 框架的整合。

(6)video/,视频分析模块。包括背景提取、光流跟踪、卡尔曼滤波等,做视频监控的读者会经常使用这个模块。

(7)videoio/,负责视频文件的读写,也包括摄像头、Kinect 等的输入。

(8)calib3d/,相机标定以及三维重建。相机标定用于去除相机自身缺陷导致的画面形变,还原真实的场景,确保计算的准确性。三维重建通常用在双目视觉(立体视觉),即两个标定后的摄像头观察同一个场景,通过计算两幅画面中的相关性来估算像素的深度。

(9)features2d/,包含 2D 特征值检测的框架。包含各种特征值检测器及描述子,例如 FAST、MSER、OBRB、BRISK等。各类特征值拥有统一的算法接口,因此在不影响程序逻辑的情况下可以进行替换。

(10)objdetect/,物体检测模块。包括haar分类器、SVM检测器及文字检测。

(11)ml/,全称为 Machine Learning,即机器学习。包括统计模型、K最近邻、支持向量机、决策树、神经网络等经典的机器学习算法。

(12)flann/,用于在多维空间内聚类及搜索的近似算法,做图像检索的读者对它不会陌生。

(13)photo/,计算摄影学。包括图像修补、去噪、HDR成像、非真实感渲染等。如果读者想实现Photoshop的高级功能,那么这个模块必不可少。

(14)stitching/,图像拼接,可用于制作全景图。

(15)nonfree/,受专利保护的算法。包含SIFT和SURF,从功能上来说这两个算法属于features2d模块的,但由于它们都是受专利保护的,想在项目中可能需要专利方的许可。

(16)shape/,形状匹配算法模块。用于描述形状、比较形状。

(17)softcascade/,另一种物体检测算法,Soft Cascade 分类器。包含检测模块和训练模块。

(18)superres/,全称为 Super Resolution,用于增强图像的分辨率。

(19)videostab/,全称为 Video Stabilization,用于解决相机移动时拍摄的视频不够稳定的问题。

(20)viz/,三维可视化模块。可以认为这个模块实现了一个简单的三维可视化引擎,有各种UI控件和键盘、鼠标交互方式。底层实现基于 VTK 这个第三方库。

Cuda加速模块,cuda 是显卡制造商 NVIDIA 推出的通用计算语言,在cv3中有大量的模块已经被移植到了cuda 语言。

(1)cuda/,CUDA-加速的计算机视觉算法,包括数据结构 cuda::GpuMat、 基于cuda的相机标定及三维重建等。

(2)cudaarithm/,CUDA-加速的矩阵运算模块。

(3)cudabgsegm/,CUDA-加速的背景分割模块,通常用于视频监控。

(4)cudacodec/,CUDA-加速的视频编码与解码。

(5)cudafeatures2d/,CUDA-加速的特征检测与描述模块,与features2d/模块功能类似。

(6)cudafilters/,CUDA-加速的图像滤波。

(7)cudaimgproc/,CUDA-加速的图像处理算法,包含直方图计算、霍夫变换等。

(8)cudaoptflow/,CUDA-加速的光流检测算法。

(9)cudastereo/,CUDA-加速的立体视觉匹配算法。

(10)cudawarping/,实现了 CUDA-加速的快速图像变换,包括透视变换、旋转、改变尺寸等。

(11)cudaev/,实现 CUDA 版本的核心功能,类似 core/ 模块中的基础算法。

4、在VS2013中配置使用OpenCV

了解了OpenCV 的数据结构和功能后,下面介绍OpenCV 的配置,Win7 64 + VSW2013 + OpenCV3.0步骤。

(1)下载安装OpenCV 3.0。下载地址:
https://opencv.org/releases/。

(2)配置环境变量:计算机属性->高级系统设置->环境变量->Path->变量值。

计算机视觉软件库OpenCV的开发基础介绍

(3)配置VS2013。首先打开VS2013建立一个Win32控制台项目。然后,在“项目->工程属性->vc++目录”中,加入包含目录

..opencvbuildinclude; ..opencvbuildincludeopencv;

..opencvbuildincludeopencv2。(..代表opencv安装的文件夹目录)

计算机视觉软件库OpenCV的开发基础介绍

加入库目录..opencvbuild\x64vc12lib。

计算机视觉软件库OpenCV的开发基础介绍

“项目->工程属性->链接器->输入->附加依赖”中添加附加依赖项。

opencv_ts300d.lib;opencv_world300d.lib

计算机视觉软件库OpenCV的开发基础介绍

配置完成后,就可以在VS2013中使用OpenCV3.0中的函数了。

5、在VS2013中简单的调用OpenCV

经过以上的基础知识介绍后,就可以进行入门的实践了。在上面配置完成的工程中,来显示一幅幅图片,验证一下是否成功。

在解决方案资源管理器中,打开源文件main.cpp(没有可以自己创建),添加以下代码

#include<opencv2opencv.hpp>

using namespace cv;

int main(){

Mat src = imread("lena.jpg"); //图片必须添加到工程目录下

imshow("src ", src);

waitKey();

}

然后点击本地Windows调试器,或者按F5运行程序,程序启动后就可以显示这张图像了,如下:

计算机视觉软件库OpenCV的开发基础介绍

6、总结

本文简单的介绍了OpenCV的起源和应用领域,以及基本数据结构和组成,可以作为OpenCV开发的一般入门指导。希望能对大家有所帮助。



Tags:计算机   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、背景介绍永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获...【详细内容】
2021-12-27  Tags: 计算机  点击:(3)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  Tags: 计算机  点击:(24)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  Tags: 计算机  点击:(31)  评论:(0)  加入收藏
上一节中我们学了如何实现ARP断网攻击,本节中我们将利用ARP欺骗的原理实现截取目标计算机图片流量,内容包括:&uuml;如何开启ip转发&uuml;怎样截取受害机图片流量 一、开启ip转...【详细内容】
2021-11-23  Tags: 计算机  点击:(23)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  Tags: 计算机  点击:(50)  评论:(0)  加入收藏
一、漏洞介绍如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允许远程执行代码。在 Microsoft Windows 2000、Windows XP 和 Windows Server 2003 系统上,攻击者可...【详细内容】
2021-09-23  Tags: 计算机  点击:(74)  评论:(0)  加入收藏
随着计算机变得越来越小,存储驱动器等硬件组件也必须变得越来越小。固态驱动器的引入允许超薄型设计,如Ultrabook,但这与行业标准SATA接口相冲突。 mSATA接口旨在创建可与SATA...【详细内容】
2021-09-03  Tags: 计算机  点击:(83)  评论:(0)  加入收藏
在系统运行时, 病毒通过病毒载体即系统的外存储器进入系统的内存储器, 常驻内存。该病毒在系统内存中监视系统的运行, 当它发现有攻击的目标存在并满足条件时,便从内存中将...【详细内容】
2021-08-30  Tags: 计算机  点击:(97)  评论:(0)  加入收藏
Hey guys,这里是 cxuan,欢迎你阅读我最新一期的文章,大家知道,我连载计算机网络已经有一定时间了,当我每了解一个新技术或者新框架的时候,我都想要先把名字概念弄懂是什么,可见概念...【详细内容】
2021-08-30  Tags: 计算机  点击:(52)  评论:(0)  加入收藏
根据个人总结,其原因主要有以下三点: 让符号位也能参与数值的计算,让计算规则更简单 让减法运算也能用加法表示,简化了硬件电路的设计 让0有统一的编码,因为 反码 和 原码 中 +0...【详细内容】
2021-08-30  Tags: 计算机  点击:(54)  评论:(0)  加入收藏
▌简易百科推荐
非法购买公民信息、开发人脸认证规避技术&hellip;&hellip;今年年初,广东省公安厅网安部门侦破全国首例破解“青少年防沉迷系统”的新型网络犯罪案件,抓获犯罪嫌疑人13名,查处非...【详细内容】
2021-12-28    人民日报客户端  Tags:数据安全步   点击:(5)  评论:(0)  加入收藏
就在今天,腾讯方面宣布将在2022年1月31日下架企业QQ和营销QQ,其实这一消息的降临并不让笔者意外,因为早在今年的10月28日20点之后,企业QQ和营销QQ就被停止了续费服务。相信很多...【详细内容】
2021-12-27  科技探险家    Tags:企业QQ   点击:(20)  评论:(0)  加入收藏
日前,上海交通大学发布《全球电竞之都评价报告》,对全球15个致力于发展电竞之都的城市进行评价,上海作为中国城市电竞发展的排头兵,其拥有众多优质电竞企业及完整产业集群,因此排...【详细内容】
2021-12-27  经济日报    Tags:电竞   点击:(3)  评论:(0)  加入收藏
为优化网络氛围环境,微博又开始整顿用户信息了。本月月初,微博官方发布公告,要求昵称中带有如“二货”“SB”“瘪三”“娘炮”等明显低俗或侮辱性词汇的用户尽快修改,否则将面临...【详细内容】
2021-12-24  运了个营    Tags:微博   点击:(10)  评论:(0)  加入收藏
昨日谷歌宣布,自2022年12月19日开始停止对OnHub的软件支持,OnHub路由器仍将提供Wi-Fi信号,但用户无法用谷歌Home应用程序管理它。无法更新Wi-Fi网络设置、添加额外的Wifi设备或...【详细内容】
2021-12-22  雷峰网    Tags:Google OnHub   点击:(5)  评论:(0)  加入收藏
IT之家 12 月 20 日消息,百度网盘青春版 iOS 客户端今日晚间率先开启内测,安卓客户端将在稍后内测。使用苹果 iPhone 的IT之家小伙伴可以点此下载内测版,需要先下载 TestFlight...【详细内容】
2021-12-21  IT之家    Tags:百度网盘   点击:(10)  评论:(0)  加入收藏
对于拼车单,是接还是不接,不少网约车司机表示很矛盾。接吧,钱少事多,常常跑了个寂寞,不接吧,车多客少,挑三拣四没饭吃。 在平台大力推广拼车单之下,不少司机迫于生活压力,最终还是打...【详细内容】
2021-12-17  网约车情报分享    Tags:滴滴   点击:(9)  评论:(0)  加入收藏
蓝鲸TMT频道12月16日讯,据饿了么官方微信公众号,近日,在圆桌会上,蓝骑士与平台交流了配送安全问题。饿了么表示,线上将技术手段融入安全防护;线下将持续进行安全培训,并试点智能头...【详细内容】
2021-12-17    金融界  Tags:饿了么   点击:(24)  评论:(0)  加入收藏
开源最前线(ID:OpenSourceTop) 猿妹编译项目地址: https://github.com/restic/restic全球知名代码托管平台 GitHub 今天就重磅发布了今年的年度报告&mdash;&mdash;《2021 年度 O...【详细内容】
2021-12-17  Python部落    Tags:   点击:(9)  评论:(0)  加入收藏
新京报快讯 据中国网络视听节目服务协会网站消息,12月15日,中国网络视听节目服务协会发布了《网络短视频内容审核标准细则》(2021)。中国网络视听节目服务协会组织有关短视频平...【详细内容】
2021-12-16    新京报  Tags:短视频   点击:(11)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条