购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 知识引入

1.1.1 OpenCV简介

OpenCV是一种开源的计算机视觉库(Computer Vision Library,CVL),一直被广泛使用。OpenCV底层由C/C++语言实现,其上层提供了Python、Java、JavaScript、Ruby、MATLAB等语言的接口,可以实现多平台无缝兼容。OpenCV拥有超过2500种优化算法,包括一套全面的、经典的和先进的计算机视觉(Computer Vision,CV)和机器学习(Machine Learning,ML)算法,这些算法涉及图像识别和目标检测(object detection)等方面。目前,主要由来自微软、IBM、西门子、谷歌、英特尔、斯坦福大学、麻省理工学院、卡耐基-梅隆大学、剑桥大学等公司或大学的研究人员共同维护和支持OpenCV的开源库开发。

OpenCV包含稳定的主仓库,以及具有实验性质的或需为专利付费的opencv_contrib仓库。OpenCV模块中的硬件加速层提供了针对不同CPU和GPU的优化加速,以及不同的软件/硬件加速库。OpenCV不仅为不同的操作系统提供了视频I/O、文件I/O和用户界面(User Interface,UI),还提供了详细的用户指导手册以及大量的单元测试和例程。

1.1.2 OpenCV的主要模块

OpenCV提供了许多强大的图像和视频处理功能。其主要模块如下。

core模块 。该模块为核心模块,包含基础数据结构、动态数据结构、算法(线性代数、快速傅里叶变换等相关算法)、绘图函数、XML/YAML文件I/O、系统函数和宏等。

imgcodecs模块 。该模块为图像编解码模块,用于读取、写入图像并对各种格式的图像进行编解码处理,包括JPEG、PNG、BMP等格式的图像。

imgproc模块 。该模块为图像处理模块,主要用于进行滤波操作、形态学处理、几何变换、色彩空间转换、直方图计算、结构形状分析、运动分析、特征检测、目标检测等。

highgui模块 。该模块为高级用户交互模块,包含图形用户界面(Graphics User Interface,GUI)、图像和视频I/O,提供了窗口操作功能,如创建显示图像或者视频的窗口、通过命令窗口响应键盘和鼠标事件、操作窗口中图像的某个区域等。

features2d模块 。该模块为二维特征检测与描述模块,主要用于图像特征检测、描述、匹配等。利用该模块可以从二维图像中检测和提取对象的特征。

calib3d模块 。该模块为三维重建模块,提供了三维重建功能,可根据二维图像创建三维场景。它主要用于完成相机标定、立体视觉模拟、姿态估计和三维物体重建等任务。

video模块 。该模块为视频模块,提供了光流法、运动模板、背景分离、目标跟踪等视频处理技术,以及视频分析(video analysis)功能,如分析视频中连续帧的运动、跟踪视频中的目标。该模块还提供了视频稳定处理功能,可解决拍摄视频时的抖动问题等。

gapi模块 。该模块为图形加速模块,可对图像算法做加速处理,主要用于图像和视频数据的高性能处理和计算,提供简化编程模型和优化图像处理的算法。

objdetect模块 。该模块为目标检测模块,不仅提供了目标检测功能,还提供了常见的目标检测算法和预训练的目标检测模型。

ml模块 。该模块为机器学习模块,提供了机器学习功能,包含常见的统计模型和分类算法等机器学习算法,如 k 近邻( k -Nearest Neighbors, k NN)、 k 均值聚类( k -Means Clustering)、支持向量机(Support Vector Machine,SVM)、神经网络(neural network)等。

dnn模块 。该模块为深度神经网络(Deep Neural Network,DNN)模块,提供了深度学习功能,支持Caffe、TensorFlow、PyTorch、DarkNet等主流的深度学习框架,用于加载和运行深度学习模型,从而可以进行图像分类(image classification)、目标检测、语义分割(semantic segmentation)等操作。

ts模块 。该模块为测试模块,主要包含OpenCV的单元测试和功能测试框架,用于验证OpenCV相关库的正确性和稳定性。

OpenCV还提供了许多其他模块,可以用于图像拼接、图像分割(image segmentation)、目标识别等。用户可以根据自己的需求组合使用这些模块,以完成特定的计算机视觉任务。

1.1.3 OpenCV的版本

1999年,加里·布拉德斯基(Gary Bradski)在英特尔公司创建了计算机视觉库项目。该项目旨在提供通用的计算机视觉接口,并以开源的方式发布。

本节介绍OpenCV的版本演进。

1.OpenCV 1.x

OpenCV 1.x是最早的版本,这个版本提供了许多基本的图像处理功能和算法。OpenCV 1.x主要关注实时计算机视觉,并且强调图像处理的速度和准确性。OpenCV 1.x提供了多种图像处理和分析方法,包括滤波、边缘检测、形态学处理、测量分析等;支持多种格式的图像的读取、保存和显示,包括常见的BMP、JPEG、PNG等格式的图像;提供了多种图像变换和特征提取方法,如直方图均衡化、色彩空间转换、边缘检测等;支持多种窗口操作,如滑动窗口、固定窗口等,方便进行图像分析和检测等。

2.OpenCV 2.x

OpenCV 2.x是基于C++的版本,比OpenCV 1.x易用,具有更好的封装和自动内存管理功能。在OpenCV 2.x中,所有类和函数都包含在命名空间“cv”中。与OpenCV 1.x相比,OpenCV 2.x更加灵活和强大,具有更多的特性和算法。在OpenCV 2.x中,可以基于面向对象的思想使用各种函数库,使代码更加清晰和易于维护。

另外,OpenCV 2.x中增加了许多新的功能和算法,如视频分析、3D重建、机器学习等领域的功能和算法。OpenCV 2.x还支持多种语言接口,包括Python、Java和MATLAB等语言的接口。

3.OpenCV 3.x

OpenCV 3.x在OpenCV 2.x的基础上进行改进和扩展,具有更多的新特性和算法。OpenCV 3.x进一步加强了面向对象的编程思想,使代码更加简洁、易读和易于维护。OpenCV 3.x中增加了一些新的功能,例如深度学习、全景拼接、立体视觉等。此外,OpenCV 3.x还加强了与其他计算机视觉库(如Halcon、Media SDK等)的集成和互操作性。

4.OpenCV 4.x

OpenCV 4.x在OpenCV 3.x的基础上进行了改进和扩展,如OpenCV 4.x中添加了新的模块G-API,它可以作为基于图形的图像处理管线(pipeline)的引擎;OpenCV 4.x的dnn模块支持ONNX(Open Neural Network Exchange,开放神经网络交换)格式的网络;OpenCV 4.x将二维码检测器和解码器添加到objdetect模块中,并将稠密逆搜索(Dense Inverse Search,DIS)光流算法从opencv_contrib转移到video模块。

相对于OpenCV 3.x,OpenCV 4.x增加了很多新的功能和算法,如神经风格迁移、目标检测和跟踪等。OpenCV 4.x还加强了代码的优化和重构,提高了代码的执行效率。

1.1.4 OpenCV-Python

OpenCV-Python是由原始OpenCV C++实现的Python包装器,是OpenCV库的Python接口。

Python是一种面向对象的、解释型的计算机高级程序设计语言。Python 凭借语法简洁、易于学习、功能强大、可扩展性强、跨平台等特点,成为继Java和C语言之后的又一热门程序设计语言。它的简单性和代码可读性使程序员能够用更少的代码实现功能。

但与C/C++相比,Python的执行速度较慢。Python可以使用C/C++轻松扩展,使用户可以使用C/C++编写计算密集型代码,并使用Python进行封装。使用OpenCV-Python主要有两大好处:第一,代码运行速度与原始C/C++代码的一样快,因为它在后台运行的实际是C++代码;第二,用Python编写代码比用C/C+容易。

OpenCV-Python需要使用NumPy库,OpenCV在程序中使用NumPy数组存储图像数据。

1.1.5 龙芯平台和OpenCV

龙芯平台支持OpenCV,当前OpenCV开源社区已经支持LoongArch自主指令集架构(龙架构)。基于龙芯平台,用户可以编写程序、调用OpenCV接口来实现具体功能,如图像与视频I/O、二值图像分析与处理、颜色空间转换、视频对象分析与跟踪、边缘轮廓检测与提取、图像特征提取与匹配、深度学习模型推理等。

龙芯平台操作系统源中已经集成了OpenCV的相关软件包,用户只需要通过终端系统即可完成OpenCV的安装。如在Loongnix 20系统上,直接通过以下命令即可安装OpenCV。 XBMB//U9/sYbO+yRbgSw/wld5wGDSMl6CKEm8zToaZOO6RAWa16upLy6BIFTPF7x

sudo apt-get install libopencv-dev python3-opencv
点击中间区域
呼出菜单
上一章
目录
下一章
×