OpenCV 4基础篇| OpenCV简介

目录

  • 1. 什么是OpenCV
  • 2. OpenCV的发展历程
  • 3. 为什么用OpenCV
  • 4. OpenCV应用领域
  • 5. OpenCV的功能模块
    • 5.1 基本模块
    • 5.2 扩展模块
    • 5.3 常用函数目录

1. 什么是OpenCV

  • OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV提供了大量的计算机视觉、图像处理和模式识别的算法,包括实时图像处理、视频分析、特征检测、目标跟踪、人脸识别、物体识别、图像分割、光流法、立体视觉、运动估计、机器学习和深度学习等。

  • OpenCV是一个跨平台的库,支持多种操作系统,包括Linux、Windows、Android、Mac OS和iOS等。它使用C++编写,同时也提供了Python、Java、MATLAB等语言的接口,方便不同编程语言的开发者使用。由于OpenCV的开源性和跨平台性,它已经成为计算机视觉领域最受欢迎的库之一,广泛应用于工业检测、医学影像处理、智能交通系统、安防监控系统、机器人视觉、游戏开发等领域。

  • OpenCV的设计初衷是实现计算机视觉的自动化,帮助计算机去理解我们的世界,以便自动完成一些基本的任务。它提供了一系列的算法和工具,使得开发者可以更加便捷地实现各种计算机视觉应用。同时,OpenCV也支持多种硬件加速技术,如Intel的IPP和GPU加速,使得计算机视觉应用的性能得到了极大的提升。

  • 网站一览

    • OpenCV官方网址:https://opencv.org/
    • OpenCV Github 主页:https://github.com/opencv/opencv
    • OpenCV Wiki 主页:http://code.opencv.org/

2. OpenCV的发展历程

  • 1999年,OpenCV由英特尔公司研究员Gary Bradski在计算机视觉库Intel Image Processing Library(IPL)的基础上发起并创建。IPL是一个商业软件库,主要用于实时图像处理。OpenCV作为IPL的替代品,以开源的形式发布,并提供了与IPL兼容的接口。
  • 2000年,OpenCV的第一个开源版本OpenCV alpha 3发布,并在同年12月发布了针对Linux平台的OpenCV beta 1版本。
  • 2006年,OpenCV 1.0版本正式发布,支持Windows和Mac OS操作系统,并提供了基础的图像处理和机器学习算法。此后,OpenCV不断迭代更新,发布了多个版本,并逐渐增加了对新的操作系统、编程语言和硬件加速的支持。
  • 2009年,OpenCV 2.0版本发布,开始使用C++作为主要编程语言,并提供了更加丰富的计算机视觉算法和函数库。同时,为了保持与旧版本的兼容性,OpenCV 2.x仍然保留了C语言的接口。
  • 2014年,OpenCV 3.0版本发布,标志着OpenCV进入了一个新的里程碑。OpenCV 3.x版本在保留了2.x版本的基础上,增加了对新的计算机视觉算法和深度学习框架的支持,并提供了更加高效的硬件加速功能。
  • 2018年,OpenCV 4.0版本发布,继续加强了对深度学习和计算机视觉领域的支持,并引入了更多的新特性和优化。

3. 为什么用OpenCV

  • 功能强大:OpenCV提供了丰富的图像处理和计算机视觉算法,包括图像滤波、边缘检测、特征检测、目标跟踪、物体识别、摄像头标定等。这使得开发者能够轻松应对各种复杂的计算机视觉任务。
  • 跨平台:OpenCV支持多种操作系统,如Linux、Windows、Android、Mac OS和iOS等,使得开发者可以在不同的平台上开发和部署计算机视觉应用。
  • 开源性:OpenCV是一个开源库,可以免费获取和使用。这为开发者提供了一个自由、开放的平台,可以自由地学习和探索计算机视觉技术。
  • 易于学习:OpenCV提供了大量的示例代码和案例,帮助开发者快速上手并解决实际问题。此外,OpenCV的接口清晰、文档完善,使得开发者可以更加高效地使用它。
  • 社区支持:OpenCV拥有一个庞大的用户社区,提供了丰富的资源和技术支持。开发者可以在社区中交流经验、解决问题,并获取最新的技术动态和更新。

4. OpenCV应用领域

  • 计算机视觉:OpenCV在计算机视觉领域有广泛的应用,包括目标检测、图像分类、人脸识别、姿态估计、运动估计、光流估计等。
  • 视频分析:OpenCV可用于视频分析任务,如视频跟踪、行为识别、动作识别等。
  • 医学影像处理:OpenCV在医学影像处理方面也有应用,如医学图像分割、医学图像配准、医学图像增强等。
  • 智能交通系统:OpenCV可用于智能交通系统,如车辆检测、车牌识别和行人跟踪等。
  • 安防监控系统:OpenCV在安防监控系统中有着重要应用,如行为识别、目标追踪和异常检测等。
  • 机器人视觉:OpenCV可用于机器人视觉领域,如障碍物检测、地标识别和自主导航等。
  • 游戏开发:OpenCV也可以用于游戏开发,如虚拟现实、增强现实等。
  • 工业检测:OpenCV在工业检测中也有应用,如缺陷检测、产品分类、机器视觉等。
  • 其它:OpenCV还提供了各种图像处理和滤波函数,如图像平滑、边缘检测、图像增强等,可以应用于图像编辑、图像恢复等领域。同时,OpenCV还支持深度学习框架,可以实现图像分类、目标检测等任务,可以应用于人工智能、自动驾驶等领域。

5. OpenCV的功能模块

1

5.1 基本模块

模块说明
calib3d相机标定相关
core核心功能模块,主要包含opencv库的基础结构和基本操作。
dnn深度学习模块
features2d二维特征检测点检测、描述、匹配等
flann最近邻匹配、聚类等。
gapi该模块对图像处理算法做了加速处理
highgui图像显示、按钮、鼠标等操作。
imgcodecs负责图像文件读写,如图像读取与保存
imgproc图像处理函数
ml机器学习相关算法
objdetect目标检测,包括Cascade face detector; latent SVM; HOG等
photo用于计算摄影处理和恢复照片的算法
stitching图像拼接,利用图像特征点进行图像拼接
video视频处理,包括背景分割、视频跟踪等
videoio负责视频文件的读取和写入

5.2 扩展模块

模块说明
arucoArUco和ChArUco标记。包括增强现实的ArUco标记和ChArUco标记
bgsegm背景分割。改进的自适应背景混合模型,用于在不同照明条件下实时人体跟踪。
ccalib自定义校准。用于3D重建、全景相机校准、随机模式校准和多摄像头校准的模式。
cnn_3dobj深度物体识别与姿态。使用Caffe深度神经网络库构建、训练和测试视觉物体识别和姿态的CNN模型。
cuda利用GPU处理图像的模块,包括下面部分:
cudaarithm在CUDA架构上执行数学计算的库
cudabgsegm在CUDA架构上进行背景分割
cudacodec在CUDA架构上进行编码解码
cudafeatures2d在CUDA架构上进行特征检测
cudafilters在CUDA架构上进行图像滤波
cudaimgproc在CUDA架构上进行图像处理
cudalegacy在CUDA架构上进行的传统处理支持
cudaobjdetect在CUDA架构上进行目标检测
cudaoptflow在CUDA架构上进行光流计算
cudastereo:基于CUDA技术的用于立体视觉任务的模块,它可以加速立体视觉算法的计算过程,提高处理速度和效率
cudawarping利用NVIDIA的CUDA技术来进行图像畸变校正和图像重投影的计算,以实现更高效的处理速度和更好的性能
cudev为OpenCV中的某些功能提供了CUDA实现,以加速这些操作。它可以与其他OpenCV模块配合使用,以利用GPU的并行计算能力来提高图像处理和计算的速度。
cvv调试器, 弹出一个图形用户界面(GUI),能够交互式地进行视觉调试计算机视觉程序
datasets用于读取现有的计算机视觉数据库的代码,并且展示如何使用这些读取器来进行数据集的训练、测试和运行的示例。
dnn_objdetect用于对象检测和识别的深度学习模块
dnns_easily_fooled一种能够欺骗深度神经网络(DNNs)的代码或技术。这种方法利用网络中的激活值来欺骗网络,使其识别错误的目标或将某个目标识别为另一个目标。
dpm:一种用于目标识别的算法,它基于 Felzenszwalb 的级联检测器(cascade detector)并添加了可变形对象检测和识别
face人脸识别,包括特征脸(Eigen)、Fisher和局部二值模式直方图(LBPH)方法。
freetype用于在图像上绘制文本的功能模块。它提供了一些函数和类,可用于在图像中添加文字,包括选择字体、设置字体大小、指定颜色、位置和对齐方式等。
fuzzy模糊数学的图像处理
hdf:分层数据存储。该模块包含用于分层数据格式的输入/输出(I/O)例程,旨在存储大量数据。
hfs层次特征选择,一种用于特征选择和降维的算法,可应用于计算机视觉和模式识别任务中
img_hash哈希算法来计算图像的哈希值,用来比较两个图像的相似性
line_descriptor用于线段提取和匹配的功能模块。提供了从图像中提取、描述和匹配线段的方法,使用二进制描述符来表示线段
matlabMATLAB接口
optflow光流算法。用于运行和评估deepflow、simpleflow、sparsetodenseflow和motion templates(轮廓光流)的算法。
ovis:用于渲染、可视化和交互式操作的工具包。它是基于OpenGL的一个功能模块,用于创建和展示3D场景、模型和虚拟现实(VR)环境
phase_unwrapping一个用于相位展开的功能模块
plot允许在一维或二维中绘制数据。
reg:图像配准。基于像素的图像配准,用于精确对齐
rgbdRGB深度处理模块。Linemod三维物体识别。
saliency显著性API。用于确定人眼在场景中的关注点。具有静态、运动和“物体性”显著性的计算例程。
sfm该模块包含从2D图像进行三维重建的算法。该模块的核心是Libmv的轻量级版本
shape提供了一些形状相关的功能和操作
stereo立体匹配。使用不同描述符进行的立体匹配:Census、CS-Census、MCT、BRIEF 和 MV。
structured_light生成结构光模式,投影结构光,解码结构光图像,三维重建等
superres超分辨率图像处理技术,旨在通过使用算法和图像处理方法将低分辨率图像恢复到高分辨率的过程
surface_matching用于三维物体检测和定位的功能
text视觉文本匹配,在一个视觉场景中检测文字,切分单词,并识别文字
tracking基于视觉的物体跟踪
videostab视频稳定功能。用于减少由于相机抖动或运动导致的视频剧烈晃动或抖动。
viz提供了三维可视化功能。该模块允许在应用程序中创建、渲染和交互式显示三维场景和对象。
xfeatures2d特征检测与描述符的扩展功能,包含了一些实验性的和付费的专利特征检测器/描述符算法
ximgproc扩展图像处理。包括结构化森林、域变换滤波器、引导滤波器、自适应流形滤波器、联合双边滤波器和超像素等算法。
xobjdetect增强的2D对象检测。使用Waldboost级联和计算作为积分特征的局部二值模式,用于2D对象检测。
xphoto扩展的计算摄影。提供额外的照片处理算法:色彩平衡、降噪和修复处理等功能。

5.3 常用函数目录

1
2
3
4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/391378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch-线性回归

已经进入大模微调的时代&#xff0c;但是学习pytorch&#xff0c;对后续学习rasa框架有一定帮助吧。 <!-- 给出一系列的点作为线性回归的数据&#xff0c;使用numpy来存储这些点。 --> x_train np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],[9.779], [6.1…

多维时序 | Matlab实现TCN-RVM时间卷积神经网络结合相关向量机多变量时间序列预测

多维时序 | Matlab实现TCN-RVM时间卷积神经网络结合相关向量机多变量时间序列预测 目录 多维时序 | Matlab实现TCN-RVM时间卷积神经网络结合相关向量机多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现TCN-RVM时间卷积神经网络结合相关向量机…

跟着pink老师前端入门教程-day24

四、移动端WEB开发之响应式布局 1、响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 1.2 响应式布局容器 响应式需要一个父级做为布局容器&#xff0c;来配合子级元素来实现变化效果。 原理…

抽象队列同步器 AQS

文章目录 AQS一、AQS 概述1、什么是 AQS &#xff1f;2、AQS 架构图3、AQS 原理概述4、同步状态state5、FIFO等待队列6、AQS 中的 Node7、AQS 的特点 二、AQS 源码&#xff08;以 ReentrantLock 为例&#xff09;1、基本实现2、加锁1&#xff09;lock2&#xff09;addWaiter【1…

虚拟线程详解

前言 JDK21正式发布了虚拟线程 虚拟线程类似Golang中的协程&#xff0c;虚拟线程是轻量级线程&#xff0c;它可以大大减少编写、维护和观察高吞吐量并发应用程序的工作量&#xff0c;能够大大提升服务的高并发性能&#xff0c;允许通过 java.lang.Thread API 的现有代码来使用…

挑战杯 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…

如何实现Vuex数据持久化

Vuex是一个非常流行的状态管理工具&#xff0c;它可以帮助我们在Vue.js应用中管理和共享数据。然而&#xff0c;当应用重新加载或刷新时&#xff0c;Vuex的状态会被重置&#xff0c;这就导致了数据的丢失。那么&#xff0c;如何才能实现Vuex的数据持久化呢&#xff1f;让我们一…

正确看待OpenAI大模型Sora

2月16日凌晨&#xff0c;OpenAI发布了文生视频模型Sora。官方是这样描述的&#xff1a;Sora is an AI model that can create realistic and imaginative scenes from text instructions.Sora一个人工智能模型&#xff0c;它可以根据文本指令创建逼真和富有想象力的场景。Sora…

【NI-DAQmx入门】调整数据记录长度再进行数据处理

需要注意的是&#xff0c;初学者很容易造成一个大循环&#xff0c;导致采集循环的执行时间过长&#xff0c;最佳操作是采集循环只干采集的事&#xff0c;另起一个循环做数据拆解或分析。 有时需要以一定的采样率获取数据并记录所需的长度。然而&#xff0c;在处理这些数据时&am…

高校疫情防控系统的全栈开发实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

硬错误-STM32

需要修改栈大小 还得是野火的文档比较讲得深一点。

Transformer面试十问

1 Scaled Dot-Product Attention中为什么要除以 d k \sqrt{d_k} dk​ ​? 1. 从纯数学上考虑&#xff1a;对于输入均值为0,方差为1的分布&#xff0c;点乘后结果其方差为dk&#xff0c;所以需要缩放一下。下图为原论文注释。 2. 从神经网络上考虑&#xff1a;防止在计算点积…

【教学类-19-08】20240214《ABAB式-规律黏贴18格-手工纸15*15CM-一页3种图案,A空,纵向、无边框》(中班)

背景需求 利用15*15CM手工纸制作AB色块手环&#xff08;手工纸自带色彩&#xff09;&#xff0c;一页3个图案&#xff0c;2条为一组&#xff0c;黏贴成一个手环 素材准备 代码展示 # # 作者&#xff1a;阿夏 # 时间&#xff1a;2024年2月14日 # 名称&#xff1a;正方形数字卡…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_3

《剑指Offer》笔记&题解&思路&技巧&优化_Part_3 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题1. LCR 138. 有效数字——表示数值的字符串2. LCR 139. 训练计划…

数据结构对链表的初步认识(一)

已经两天没有更新了&#xff0c;今天就写一篇数据结构的链表吧&#xff0c;巩固自己也传授知识&#xff0c;不知道各位是否感兴趣看看这一篇有关联表的文章。 目录 链表的概念与结构 单向链表的实现 链表各个功能函数 首先我在一周前发布了一篇有关顺序表的文章&#xff0c;…

基于RTOS的嵌入式软件开发与可靠性提升

&#xff08;本文为简单介绍&#xff0c;观点来自网络&#xff09; 随着科技的快速发展&#xff0c;嵌入式系统无所不在&#xff0c;从你的智能手表到汽车的自动驾驶系统&#xff0c;它们都在静静地改变我们的世界。而在这一切的背后&#xff0c;实时操作系统&#xff08;RTOS&…

OpenAI 发布文生视频大模型 Sora,AI 视频要变天了,视频创作重新洗牌!AGI 还远吗?

一、一觉醒来&#xff0c;AI 视频已变天 早上一觉醒来&#xff0c;群里和朋友圈又被刷屏了。 今年开年 AI 界最大的震撼事件&#xff1a;OpenAI 发布了他们的文生视频大模型 Sora。 OpenAI 文生视频大模型 Sora 的横空出世&#xff0c;预示着 AI 视频要变天了&#xff0c;视…

Google Gemini 1.5:引领跨模态AIGC信息分析理解与视频内容推理的新篇章,与 Open AI 决一高下!

Gemini 1.5具有100万token的上下文理解能力&#xff0c;是目前最强&#xff01;具有跨模态理解和推理&#xff1a;能够对文本、代码、图像、音频和视频进行高度复杂的理解和推理。允许分析1小时视频、11小时音频、超过30,000行代码或超过700,000字的文本。不过谷歌这个Gemini 1…

简单聊聊k8s,和docker之间的关系

前言 随着云原生和微服务架构的快速发展&#xff0c;Kubernetes和Docker已经成为了两个重要的技术。但是有小伙伴通常对这两个技术的关系产生疑惑&#xff1a; 既然有了docker&#xff0c;为什么又出来一个k8s&#xff1f; 它俩之间是竞品的关系吗&#xff1f; 傻傻分不清。…

数据预处理 —— AI算法初识

一、预处理原因 AI算法对数据进行预处理的原因主要基于以下几个核心要点&#xff1a; 1. **数据清洗**&#xff1a; - 数据通常包含缺失值、异常值或错误记录&#xff0c;这些都会干扰模型训练和预测准确性。通过预处理可以识别并填充/删除这些不完整或有问题的数据。 2. **数…