当前位置: 首页 > news >正文

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

相关文章:

OpenCV 4基础篇| OpenCV简介

目录 1. 什么是OpenCV2. OpenCV的发展历程3. 为什么用OpenCV4. OpenCV应用领域5. OpenCV的功能模块5.1 基本模块5.2 扩展模块5.3 常用函数目录 1. 什么是OpenCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它…...

Vue常用内置指令,代码Demo演示和讲解

文章目录 一、v-text二、v-html三、v-bind四、v-model五、v-on六、v-show七、v-if、v-else八、v-for九、v-cloak 一、v-text 作用&#xff0c;更改标签的显示值使用 v-text 会读取 data中的变量值如果变量存在替换原来的值&#xff0c;如果不存在则报错 <!DOCTYPE html>…...

Spring设计模式之工厂模式创建Bean对象

BeanFactory和Application是Spring容器中创建和管理Bean对象的接口&#xff0c;但是它们的实现方式不同。 BeanFactory&#xff1a; BeanFactory采用延迟初始化策略&#xff0c;只有应用程序向容器请求特定的Bean时才创建该Bean对象。它的启动速度很快&#xff0c;但在程序运…...

Elasticsearch 别名(Aliases)的作用

Elasticsearch 8.4.3 别名&#xff08;Aliases&#xff09; 一. 介绍二. 别名的优势三. 别名的基本操作3.1 创建别名3.2 查询别名关联的索引3.3 删除别名3.4 更新别名3.5 通过别名查询数据 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接…...

基于vue的个性化推荐餐饮系统Springboot

项目&#xff1a;基于vue的个性化推荐餐饮系统Springboot 摘要 现代信息化社会下的数据管理对活动的重要性越来越为明显&#xff0c;人们出门可以通过网络进行交流、信息咨询、查询等操作。网络化生活对人们通过网上购物也有了非常大的考验&#xff0c;通过网上进行点餐的人也…...

量子计算:数据安全难题

当今数字技术面临的最大挑战之一是安全系统和数据。为此&#xff0c;人们设计了复杂的算法来加密数据并通过称为对称加密的框架来保护数据。虽然这已被证明是成功的&#xff0c;但量子计算的进步&#xff08;利用量子力学比传统计算机更快地解决复杂问题&#xff09;可能会彻底…...

CCF-B类SGP‘24 4月10日截稿!速速行动!

会议之眼 快讯 第22届SGP(Eurographics Symposium on Geometry Processing)即欧洲图形学几何处理专题讨论会将于 2024 年 6月24 -日至26日在美国麻省理工学院举行&#xff01;SGP是传播几何处理新研究想法和尖端成果的首要学术会议。作为该领域的重要学术盛事&#xff0c;SGP会…...

阿里云服务器安装MySQL、Apache、PHP

节日期间突然想要自己搭建一个个人网站&#xff0c;于是在阿里云申请了一个可以免费使用3个月的服务器&#xff0c;申请的云市场产品Wordpress平台&#xff08; ALinux3 LNMP PHP7.4&#xff09;。官方教程使用的CentOs系统&#xff0c;和我申请的ALinux3操作有一些差异&#x…...

Rust基础拾遗--并发和异步编程

Rust基础拾遗 前言1.并发1.1 分叉与合并并行1.1.1 启动与联结1.1.2 跨线程错误处理1.1.3 跨线程共享不可变数据1.1.4 rayon 1.2 通道1.2.1 发送值1.2.2 接收值1.2.3 运行管道1.2.4 通道的特性与性能1.2.5 线程安全&#xff1a;Send与Sync 1.3 共享可变状态 2.异步编…...

Javascript怎么输出内容?两种常见方式以及控制台介绍

javascript是一种非常重要的编程语言&#xff0c;在许多网页中它被广泛使用&#xff0c;可以实现许多交互效果和动态效果。输出是javascript中最基本的操作之一&#xff0c;下面将介绍两种常见的输出方式。 一、使用console.log()函数输出 console.log()函数是常用的输出函数…...

机器人路径平滑——线性插值

C++代码 //要实现平滑二维曲线的算法,你可以使用贝塞尔曲线或B样条曲线。下面是一个使用B样条曲线的C++算法的示例:#include <iostream> #include <vector> #include <fstream> #include <iomanip>...

2024-2-21-多线程基础作业

作业&#xff1a; 源代码&#xff1a; #include <myhead.h> #define MAXSIZE 64 //定义要传递的结构体类型 struct Info {const char *src;const char *dest;int len; }; int get_file_len(const char *srcfile, const char *destfile) {//以只读的形式打开源文件int sr…...

MySQL8的ONLY_FULL_GROUP_BY SQL模式兼容问题

文章目录 1. 问题描述2. 解决方法1. 修改查询2. 修改SQL模式3. 使用ANY_VALUE()函数 1. 问题描述 Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column btc-cloud.t1.id which is not funct…...

Django使用Celery异步

安装包 pip install celerypip install eventlet 1.在项目文件的根目录下创建目录结果 2. 在main.py文件中 # !/usr/bin/env python # -*-coding:utf-8 -*-""" # Author &#xff1a;skyTree # version &#xff1a;python 3.11 # Description&#…...

vue3 + ts + echart 实现柱形图表

首先封装Echart一个文件 代码如下 <script setup lang"ts"> import { ECharts, EChartsOption, init } from echarts; import { ref, watch, onMounted, onBeforeUnmount } from vue;// 定义props interface Props {width?: string;height?: string;optio…...

c语言结构体与共用体

前面我们介绍了基本的数据类型 在c语言中 有一种特殊的数据类型 由程序员来定义类型 目录 一结构体 1.1概述 1.2定义结构体 1.3 结构体变量的初始化 1.4 访问结构体的成员 1.5结构体作为函数的参数 1.6指向结构的指针 1.7结构体大小的计算 二共用体 2.1概述 2.2 访…...

vue系列--vue封装拖拽指令v-drag

1.首先将下面的代码引入代码中 export const initVDrag (Vue) > {Vue.directive("drag", (el) > {const oDiv el // 当前元素const minTop oDiv.getAttribute("drag-min-top")const ifMoveSizeArea 20oDiv.onmousedown (e) > {let target …...

devc++ 使用 winsock 实现 UDP 局域网 WIFI 广播

参考链接 使用UDP发送广播报_udp广播 inaddr_broadcast-CSDN博客 UDP接收端收不到广播的消息问题排查_unity upd广播连接不上是什么情况-CSDN博客 如何禁用自己电脑的虚拟网卡-百度经验 (baidu.com) 但是wifi 会屏蔽255.255.255.255 广播地址&#xff0c;所以 255.255.255.2…...

JS实现根据数组对象的某一属性排序

JS实现根据数组对象的某一属性排序 一、冒泡排序&#xff08;先了解冒泡排序机制&#xff09;二、根据数组对象的某一属性排序&#xff08;引用sort方法排序&#xff09; 一、冒泡排序&#xff08;先了解冒泡排序机制&#xff09; 以从小到大排序为例&#xff0c;冒泡排序的原…...

CSP-J 2023 复赛第2题:公路 ← 贪心算法

【题目来源】https://www.luogu.com.cn/problem/P9749https://www.acwing.com/problem/content/5311/【题目描述】 小苞准备开着车沿着公路自驾。 公路上一共有 n 个站点&#xff0c;编号为从 1 到 n。 其中站点 i 与站点 i1 的距离为 vi 公里。 公路上每个站点都可以加油&…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...