OpenCV快速入门
OpenCV(Open Source Computer Vision Library,开源计算机视觉库)是一个广泛应用于图像处理、计算机视觉、视频分析等领域的开源库。它不仅适用于研究人员和开发人员,还被广泛用于学术、工业和商业应用。本篇文章将帮助你快速了解 OpenCV 的起源、功能、应用场景以及如何在 Python 中使用它。
1. OpenCV 的诞生与发展历程
1.1 OpenCV 的诞生
OpenCV 最早由 Intel 于 1999 年推出,旨在为开发者提供一个高效、易用的计算机视觉库,特别是在处理图像和视频方面。Intel 推出的 OpenCV 成为了计算机视觉领域的标杆,广泛应用于学术研究和工业项目中。
1.2 OpenCV 的发展历程
- 1999年:OpenCV 发布,提供了基本的图像处理和边缘检测功能。
- 2006年:版本更新,优化性能,支持多核处理和并行计算。
- 2012年:引入深度学习支持,增加了 DNN 模块,可以加载训练好的深度学习模型。
- 现在:OpenCV 支持 Python、C++、Java、Android 等平台,成为计算机视觉和机器学习的核心库之一。
2. OpenCV 的实际应用场景
OpenCV 在多个实际场景中有广泛应用,以下是一些典型的例子:
- 人脸检测与识别:在安防监控、社交应用中,OpenCV 被广泛应用于人脸识别、面部表情识别等任务。
- 自动驾驶:OpenCV 在自动驾驶汽车中扮演了重要角色,帮助汽车识别道路标志、行人、车辆等信息。
- 医学图像分析:通过 OpenCV,可以对医学图像进行处理,如分割肿瘤区域、识别病变等。
- 工业检测:OpenCV 可以帮助工业生产线上的质量检测、缺陷检测、物体跟踪等任务。
- 增强现实:通过对图像中的物体进行检测,OpenCV 可以将虚拟物体与现实世界图像融合,实现增强现实效果。
3. OpenCV 能做什么?不能做什么?
3.1 OpenCV 能做的事情
- 图像处理:如图像平滑、边缘检测、形态学处理、图像锐化等。
- 特征检测与匹配:如角点检测、SURF、SIFT 等特征点提取与匹配。
- 人脸识别与检测:使用训练好的分类器进行人脸检测和识别。
- 物体检测与跟踪:通过训练模型进行物体检测,支持不同算法,如 HOG + SVM、深度学习方法等。
- 视频分析:视频分割、背景建模、光流计算、运动物体跟踪等。
- 图像分类与深度学习:通过 DNN 模块支持深度学习模型的推理,进行图像分类、目标检测等任务。
3.2 OpenCV 做不到的事情
- 复杂的神经网络训练:OpenCV 本身并不是深度学习框架,虽然支持加载深度学习模型进行推理,但不提供高效的神经网络训练功能。
- 大规模的数据处理:OpenCV 适合处理图像和视频,但对于大规模、复杂的实时数据处理,它并非最佳选择。
4. OpenCV 的主要功能
接下来,我们将详细介绍 OpenCV 中的几个常用功能,并附带代码示例。
4.1 图像读取与显示
import cv2# 读取图像
image = cv2.imread('image.jpg')# 显示图像
cv2.imshow('Image', image)# 等待用户按键
cv2.waitKey(0)# 关闭显示窗口
cv2.destroyAllWindows()
代码注释:
cv2.imread()
:读取图像。cv2.imshow()
:显示图像。cv2.waitKey()
:等待键盘输入。cv2.destroyAllWindows()
:关闭所有显示的窗口。
4.2 图像转换为灰度图
# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 显示灰度图
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码注释:
cv2.cvtColor()
:转换图像颜色空间,将彩色图像转换为灰度图。
4.3 边缘检测(Canny 算法)
# Canny 边缘检测
edges = cv2.Canny(gray_image, 100, 200)# 显示边缘图
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码注释:
cv2.Canny()
:执行 Canny 边缘检测。
4.4 人脸检测
# 加载预训练的 Haar 人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')# 人脸检测
faces = face_cascade.detectMultiScale(gray_image, 1.3, 5)# 在图像中绘制矩形框
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)cv2.imshow('Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码注释:
cv2.CascadeClassifier()
:加载训练好的 Haar 分类器。detectMultiScale()
:检测图像中的多尺度物体(本例为人脸)。cv2.rectangle()
:绘制矩形框标记检测到的人脸。
4.5 物体追踪
# 初始化视频捕捉
cap = cv2.VideoCapture('video.mp4')# 初始化追踪器
tracker = cv2.TrackerKCF_create()# 读取第一帧图像
ret, frame = cap.read()# 选择追踪区域
bbox = cv2.selectROI('Tracking', frame, fromCenter=False, showCrosshair=True)
tracker.init(frame, bbox)# 持续追踪
while True:ret, frame = cap.read()if not ret:breakret, bbox = tracker.update(frame)if ret:x, y, w, h = [int(v) for v in bbox]cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)cv2.imshow('Tracking', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()
代码注释:
cv2.selectROI()
:选择追踪区域。cv2.TrackerKCF_create()
:创建 KCF 跟踪器。tracker.update()
:更新追踪器的位置。
5. 进阶应用:人脸换脸与背景替换
5.1 换脸(人脸交换)
# 读取两张图片
image1 = cv2.imread('person1.jpg')
image2 = cv2.imread('person2.jpg')# 转为灰度图
gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)# 进行人脸检测
faces1 = face_cascade.detectMultiScale(gray_image1, 1.1, 4)
faces2 = face_cascade.detectMultiScale(gray_image2, 1.1, 4)# 假设每张图片只有一个人脸
(x1, y1, w1, h1) = faces1[0]
(x2, y2, w2, h2) = faces2[0]# 提取人脸区域
face1 = image1[y1:y1+h1, x1:x1+w1]
face2 = image2[y2:y2+h2, x2:x2+w2]# 将face1替换到face2的位置
image2[y2:y2+h1, x2:x2+w1] = face1cv2.imshow('Face Swapped', image2)
cv2.waitKey(0)
cv2.destroyAllWindows()
5.2 背景替换
# 读取原始图像和背景图像
image = cv2.imread('person.jpg')
background = cv2.imread('new_background.jpg')# 转为灰度图并检测边缘
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY)# 创建掩码
mask = cv2.bitwise_not(thresh)# 提取人物部分
person = cv2.bitwise_and(image, image, mask=thresh)# 提取背景部分
bg = cv2.bitwise_and(background, background, mask=mask)# 将背景和人物合成
result = cv2.add(person, bg)cv2.imshow('Scene Generated', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. 总结
通过本篇文章,你已经掌握了 OpenCV 的基础知识和常见功能,并且学习了如何使用它进行图像处理、人脸检测、物体追踪、换脸和背景替换等实际应用。你还了解了 OpenCV 在各个行业中的广泛应用,特别是在计算机视觉、自动驾驶、工业检测等领域的实际价值。
希望这篇文章能帮助你更好地理解 OpenCV,并激发你在计算机视觉领域进一步探索的兴趣!
相关文章:

OpenCV快速入门
OpenCV(Open Source Computer Vision Library,开源计算机视觉库)是一个广泛应用于图像处理、计算机视觉、视频分析等领域的开源库。它不仅适用于研究人员和开发人员,还被广泛用于学术、工业和商业应用。本篇文章将帮助你快速了解 …...

ArcGIS软件之“计算面积几何”地图制作
一、消防站的泰森多边形 效果图: 二、人口调查的泰森多边形 确定后效果图: 三、人口调查的泰森多边形属性设置 确定后的效果图: 四、计算面积几何,用于求密度 先添加字段area_1,然后设置浮点型及字段属性 五…...

RHCE 第四次作业
一.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 1.配置环境 [rootlocalhost ~]# yum install bind [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 2.配置DNS主服务器 [rootlocalhost ~]# vim /etc/named.conf options { …...

【贪心算法】No.1---贪心算法(1)
文章目录 前言一、贪心算法:二、贪心算法示例:1.1 柠檬⽔找零1.2 将数组和减半的最少操作次数1.3 最⼤数1.4 摆动序列1.5 最⻓递增⼦序列1.6 递增的三元⼦序列 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到…...

分布式光伏管理办法
随着分布式光伏项目的不断增加,传统的管理方式已经难以满足高效、精准的管理需求。光伏业务管理系统作为一种集信息化、智能化于一体的管理工具,正在逐步成为分布式光伏项目管理的重要支撑。 光伏业务管理系统通过数字化手段实现对光伏业务全流程的精细化…...

2024最新软件测试面试热点问题
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 大厂面试热点问题 1、测试人员需要何时参加需求分析? 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工…...

如何利用探商宝精准营销,抓住行业机遇——以AI技术与大数据推动企业信息精准筛选
近年来,随着人工智能与大数据技术的迅猛发展,企业的营销手段和策略发生了巨大变化。尤其是在信息爆炸的数字时代,如何有效利用这些技术在海量数据中精准找到潜在客户,已成为中小企业亟待解决的核心问题。 最近,全球人…...

嵌入式硬件电子电路设计(三)电源电路之负电源
引言:在对信号线性度放大要求非常高的应用需要使用双电源运放,比如高精度测量仪器、仪表等;那么就需要给双电源运放提供正负电源。 目录 负电源电路原理 负电源的作用 如何产生负电源 负电源能作功吗? 地的理解 负电压产生电路 BUCK电…...

数据仓库还是数据集市?这俩怎么选?
数据仓库和数据集市作为支持决策分析的两种不同方式,根据各自的特点和优势,有不同的应用场景,今天就来探讨下数据集市和数据仓库该怎么选? 一、数据集市和数据仓库对比 1、数据集市与数据仓库的关系: 1)数…...

计算机图形学 实验二 三维模型读取与控制
目录 一、实验内容 二、具体内容 (在实验2.3的基础上进行修改) 1、OFF格式三维模型文件的读取 2、三维模型的旋转动画 3、键盘鼠标的交互 4、模型的修改 三、代码 一、实验内容 读取实验提供的off格式三维模型,并对其赋色。利用鼠标和键盘的交互࿰…...

NAT网络工作原理和NAT类型
NAT基本工作流程 通常情况下,某个局域网中,只有路由器的ip是公网的,局域网中的设备都是内网ip,内网ip不具备直接与外部应用通信的能力。 处于内网的设备如何借助NAT来实现访问外网的应用? 对于开启了NAT功能的局域网…...

wget命令之Tomcat(三)
引言 Tomcat是一个开源的Java Web应用服务器,实现了多个关键的Java EE规范,包括Servlet、JSP(JavaServer Pages)、JavaWebSocket等。由于Tomcat技术先进、性能稳定且免费,它成为了许多企业和开发者的首选Web应用服务器…...

IP地址修改器 5.0 重制版
IP地址修改器是一款由 kn007 大佬编写的一个小工具,可以帮助小白用户方便的进行IP地址,网卡MAC修改等等功能,工具支持多网卡,并且支持管理导入多份配置等。 程序主要原理还是利用了WMI的Win32_NetworkAdapter、Win32_NetworkAdap…...

vscode编译s32ds工程
基本可以参考下面的文章,但是需要注意的是添加完环境变量后需要重启一下vscode。我现在已经能顺利编译。感谢原创 阿隆汽车 MBD_杂谈_使用VSCode编译s32k_vscode s32k-CSDN博客 https://blog.csdn.net/ALongAuto/article/details/134961294...

大数据专业为什么要学习Hadoop课程
在当今信息爆炸的时代,大数据成为了影响各行各业的重要因素,而Hadoop作为大数据处理的核心技术之一,自然成为大数据专业学生需要掌握的一项重要技能。本文将详细探讨大数据专业为何要学习Hadoop课程,帮助读者理解其必要性和实际应…...

Xilinx FPGA的Vivado开发流程
Xilinx FPGA 的 Vivado 开发流程主要包括以下步骤: 创建工程: 启动 Vivado 软件:双击 Vivado 图标打开软件。新建工程向导:在 Quick Start 中选择 Create Project,打开新建工程向导。设置工程信息: 工程名称…...

音频模型介绍
在处理音频数据方面,有多种模型表现出色,它们在不同的音频处理任务上有着各自的优势: 自动编码器:包括多通道变分自动编码器、自回归模型和生成对抗网络等,这些模型在音乐生成领域取得了令人印象深刻的成果。 深度生成…...

《编写沪深两市实时交易数据接收程序全攻略》
《编写沪深两市实时交易数据接收程序全攻略》 一、引言二、获取股票数据的方法(一)使用爬虫框架(二)调用股票接口(三)使用免费数据 API(四)利用 Excel 的 power query 三、数据接口及…...

一文学会easyexcel导入数据,多sheet页、字典转换【附带源码】
文章目录 前言一、业务流程二、实现1、引入easyexcel、fastjson、lombok包2、创建Json工具类3、创建自定义字典转换注解4、创建字典转换实现类5、创建数据对象类6、创建多sheet页封装对象7、创建Excel导入工具类8、创建测试类 三、接口测试1、启用项目2、使用数据导出的文件&am…...

Spring中的 InitializingBean、BeanPostProcessor、@PostConstruct 等初始化动作的执行时机分析
初始化Bean的时序图如下: 小结说明: 1、相同点:InitializingBean 的(afterPropertiesSet方法)、BeanPostProcessor、PostConstruct 都是在bean的属性注入完毕之后才执行,都可以用来进行bean的初始化动作 2、初始化执行顺序优先级…...

如何利用指纹浏览器爬虫绕过Cloudflare的防护?
网络爬虫能够系统地浏览网页并提取所需的数据,通常被用于市场研究、数据分析或者竞争情报。然而,一些反爬虫机制给网络爬虫的工作带来了不少挑战和风险。 其中,Cloudflare提供了多层次的防护机制,包括IP封锁、速率限制、CAPTCHA验…...

idea 基础简单应用(java)
Java IDE(集成开发环境)的使用方法因不同的IDE而异,但通常都包含一些基本的操作和功能。以下以IntelliJ IDEA这一流行的Java IDE为例,介绍Java IDE的基本使用方法与指南: 一、下载与安装 请点击观看 idea免费安装步…...

windows环境下vscode下载安装
vscode官网 1.vscode官网:Visual Studio Code - Code Editing. Redefined 进入官网,点击下载 右键文件,以管理员方式运行,开始安装 第一步:同意此协议 第二步:更改安装位置,可以在d盘新建一个文件夹&…...

Obsidian之与Typora图片格式相互兼容
来源 [Obsidian之与Typora图片格式相互兼容 - 简书 (jianshu.com)](https://www.jianshu.com/p/303433fe82b9) 下载插件customer attachment location,并设置...

美半导体巨头正切断中国供应链,给自己“挖坑”?
美国对华半导体“脱钩断链”政策持续升级,近日开始对半导体产业链进行“去中化”。 据外媒《华尔街日报》11月5日报道,受美国政府最新指令指示,美国半导体巨头应用材料公司(Applied Materials)和泛林集团(L…...

RHCE---搭建lnmp云存储
一、恢复快照后,检查安全性(查看selinux 以及防火墙) 二、搭建LNMP环境 [rootserver ~]# yum -y install nginx mariadb-server php*三、上传软件 1、将nextcloud-25.0.1.zip压缩包传递到根目录下 2、解压缩nextcloud-25.0.1.zip …...

一些 uniapp相关bug
1.当input聚焦时布局未上移 <scroll-view style"height: calc(100vh - 100rpx - 38rpx)" :scroll-y"true"><wd-form ref"formRef" :model"fbObj">....<wd-inputlabel"联系方式"prop"contact"clear…...

操作系统-4.2文件系统的层次结构虚拟文件系统
文章目录 文件系统的层次结构物理格式化open系统调用打开文件的背后过程图中内容解释文件打开的详细步骤操作总结 虚拟文件系统1. **虚拟文件系统的作用**2. **虚拟文件系统的结构**3. **VFS 工作机制**4. **VFS 的优点** 文件系统的层次结构 用一个例子来辅助记忆文件系统的层…...

【深度学习】DreamClear:提升图片分辨率的模型
基于PixArt-XL-2模型,效果很好。 DreamClear:高容量真实世界图像修复与隐私安全数据集构建 在图像修复领域,处理真实世界中的低质量(Low-Quality, LQ)图像并恢复其高质量(High-Quality, HQ)版本一直是一个具有挑战性的任务。今天,我们将介绍一个最新的开源项目——Dr…...

操作系统进程互斥的四种软件实现和三种硬件实现
进程互斥是操作系统中保证多个进程不会同时访问共享资源的一种机制。 进程互斥的四种软件实现方式: 一、单标志法 核心思想:使用一个布尔变量(或称为标志位)来表示临界区的访问权限。该变量为true时表示允许某个进程访问临界区&…...