OpenCV详细介绍101
发表时间:2022-11-03 14:59 1 什么是opencv OpenCV的全称是Open Source Computer Vision Library,是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习开源软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。是由Intel公司俄罗斯团队发起并参与和维护,支持与计算机视觉和机器学习相关的众多算法,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序,该程序库也可以使用英特尔公司的IPP进行加速处理。它轻量级而且高效——由一系列 C 函数和C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 2 opencv历史 1999 年,Gary Bradski(加里·布拉德斯基)当时在英特尔任职,怀着通过为计算机视觉和人工智能的从业者提供稳定的基础架构并以此来推动产业发展的美好愿景,他启动了 OpenCV 项目。 OpenCV 库用C语言和 C++ 语言编写,可以在 Windows、Linux、Mac OS X 等系统运行。同时也在积极开发 Python、Java、Matlab 以及其他一些语言的接口,将库导入安卓和 iOS 中为移动设备开发应用。 OpenCV 自项目成立以来获得了来自英特尔和谷歌的大力支持,尤其需要感谢 Itseez,该公司完成了早期开发的大部分工作。此后,Arraiy 团队加入该项目并负责维护始终开源和免费的 OpenCV.org。 3 为什么用OpenCV 计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种: 1.研究代码(慢,不稳定,独立并与其他库不兼容) 2.耗费很高的商业化工具(比如Halcon, MATLAB+Simulink) 3.依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。 OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。 4 opencv的应用场景 计算机视觉可以分为以下几大方向:图像识别、目标检测、图像分割、风格迁移、图像重构、超分辨率、图像生成、人脸识别、其他。 4.1、图像分类 (Image Classification):也称图像识别,就是辨别图像是什么,或者说图像中的物体属于什么类别。 图像分类根据不同分类标准可以划分为很多种子方向;比如根据类别标签,可以划分为 •二分类问题:比如判断图片中是否包含人脸; •多分类问题:比如鸟类识别; •多标签分类,每个类别都包含多种属性的标签:比如对于服饰分类,可以加上衣服颜色、纹理、袖长等标签,输出的不只是单一的类别,还可以包括多个属性。 4.2、目标检测 (Object Detection):目标检测通常包含两方面的工作,首先是找到目标,然后就是识别目标。 目标检测可以分为单物体检测和多物体检测,即图像中目标的数量,例子如下所示: 4.3、图像分割 (Object Segmentation):图像分割是基于图像检测的,需要检测到目标物体,然后把物体分割出来。 图像分割可以分为三种: 1.普通分割:将不同分属于不同物体的像素区域分开,比如前景区域和后景区域的分割、人像分割、智能抠图 2.语义分割:普通分割的基础上,在像素级别上的分类,属于同一类的像素都要被归为一类,比如分割出不同类别的物体; 3.实例分割:语义分割的基础上,分割出每个实例物体,比如对图片中的多只狗都分割出来,识别出来它们是不同的个体,不仅仅是属于哪个类别。 一个图形分割的例子如下所示,下图就是一个实例分割的例子,用不同的颜色表示不同的实例 4.4、风格迁移 (Style Transfer):风格迁移是指将一个领域或者几张图片的风格应用到其他领域或者图片上。比如将抽象派的风格应用到写实派的图片上。 一个风格迁移的例子如下, 图 A 是原图,后面的 B-D 三幅图都是根据不同风格得到的结果 4.5、图像重构 (Image Reconstruction):也称为图像修复(Image Inpainting),其目的就是修复图像中缺失的地方,比如可以用于修复一些老的有损坏的黑白照片和影片。通常会采用常用的数据集,然后人为制造图片中需要修复的地方。 一个修复的例子如下所示,总共是四张需要修复的图片 4.6、超分辨率 (Super-Resolution):超分辨率是指生成一个比原图分辨率更高、细节更清晰的任务。一个例子如下图所示 通常超分辨率的模型也可以用于解决图像恢复(image restoration)和修复(inpainting),因为它们都是解决比较关联的问题。 4.7、图像生成 (Image Synthesis):图像生成是根据一张图片生成修改部分区域的图片或者是全新的图片的任务。这个应用最近几年快速发展,主要原因也是由于 GANs 是最近几年非常热门的研究方向,而图像生成就是 GANs 的一大应用。 一个图像生成例子如下: 4.8、人脸识别 人脸方面的应用,包括人脸识别、人脸检测、人脸匹配、人脸对齐等等,这应该是计算机视觉方面最热门也是发展最成熟的应用,而且已经比较广泛的应用在各种安全、身份认证等,比如人脸支付、人脸解锁。 4.9、其他 opencv实际上还有其他很多方向应用,包括: •图文生成(Image Captioning):给图片生成一段描述。 •文本生成图片(Text to Image):基于文本来生成图片。 •图片上色(Image Colorization):将图片从黑白变为彩色图。 •人体姿态估计(human pose estimation):识别人的行为动作 •还有包括 3D、视频、医学图像、问答、自动驾驶、追踪等等方向 |