从0开始:OpenCV入门教程【图像处理基础】
图像处理基础
一、OpenCV主要功能及模块介绍
1、内置数据结构和输入/输出
- OpenCV内置了丰富的与图像处理有关的数据结构,如Image、Point、Rectangle等。
- core模块实现了各种基本的数据结构。
- imgcodecs模块提供了图像文件的读写功能,用户使用简单的命令即可读写图像文件。
2、图像处理操作
imgproc模块提供了图像处理操作,如图像过滤、几何图像变换、绘图、色彩空间转换、直方图等。
3、图形用户界面操作
highgui模块提供了图像的图形窗口操作功能,如创建窗口显示图像或者视频、令窗口响应键盘和鼠标事件、操作窗口中图像的某个区域等。
4、视频分析
video模块提供了视频分析功能,如分析视频中连续帧之间的运动、跟踪视频中的目标。videostab模块提供了视频稳定处理功能,可解决拍摄视频时的抖动问题。optflow模块提供了与光流操作相关的算法。
5、3D重建
calib3d模块提供了3D重建功能,可根据2D图像创建3D场景。
6、特征提取
features2d模块提供了特征提取功能,可以从2D图像中检测和提取对象的特征。
7、对象检测
objdetect和xobjdetect模块提供了对象检测功能,可在图像中检测给定图像的位置。
8、机器学习
ml模块提供了机器学习功能,包含了多种机器学习算法,如k近邻(k-Nearest Neighbors,kNN)、k均值聚类(k-Means Clustering)、支持向量机(Support Vector Machines,SVM)、神经网络(Neural Network)等。机器学习算法广泛应用于目标识别、图像分类、人脸检测、视觉搜索等。
9、深度学习
深度神经网络(Deep Neural Network,DNN)模块提供了深度学习功能。深度学习是机器学习中近几年来快速发展的一个子领域,广泛应用于语音识别、图像识别、自然语言处理、图像修复、人脸识别等。OpenCV的深度学习支持Caffe、TensorFlow、Torch、Darknet等著名的深度学习框架。
10、计算摄影
计算摄影通过图像处理技术来改善相机拍摄的图像,如高动态范围成像、全景图像、图像补光等。photo和xphoto模块提供了与计算摄影有关的算法,stitching模块提供了全景图像算法。
11、形态分析
shape模块提供了形态分析功能,可以识别图像中对象的形状、分析形状之间的相似性、转换对象形状等。
12、人脸检测和识别
OpenCV已在face模块中实现了人脸检测、人脸特征检测和人脸识别功能。人脸检测属于对象检测,用于找出图像中人脸的位置和尺寸。人脸特征检测属于特征检测,用于找出图像中人脸的主要特征。人脸识别属于对象识别,包括从已知人脸集合中找出与未知人脸最匹配的人脸,以及验证给定人脸是否为某个已知人脸。OpenCV实现了基于Haar级联分类器和基于深度学习的人脸检测算法,以及EigenFaces、FisherFaces和局部二进制编码直方图(Local Binary Patterns Histograms,LBPH)等人脸识别算法。
13、表面匹配
surface_matching模块提供了3D对象识别算法和3D特征的姿态估计算法,用于根据图像的深度和强度信息识别3D对象。
14、文本检测和识别
text模块提供了文本检测和识别功能,用于识别和检测图像中的文本,实现车牌识别、道路标志识别、内容数字化等相关应用。
二、图像基本操作
读取图像:cv.imread()
import numpy as npimport cv2 as cv#加载彩色灰度图像img = cv.imread('messi5.jpg',0)
显示图像:cv.imshow()
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
写入图像:cv.imwrite()
import cv2
import numpyimg=numpy.zeros((50,50),dtype=numpy.uint8) #创建大小为50×50的黑色正方形图像cv2.imwrite('messigray.jpg',img)
思考题:如果我们想以灰度模式加载图像,显示图像,按s键可以保存图像并退出,或者按ESC键直接退出不保存,设计出代码。
import numpy as np
import cv2 as cv
img = cv.imread('cat.jpg',0) #或者把0改成cv.IMREAD_GRAYSCALE
cv.imshow('cat.jpg',img)
k=cv.waitKey(0)
if k==27:cv.destroyAllWindows()
elif k==ord('s'):cv.imwrite('catgray.png',img)cv.destroyAllWindows()


其中注意:
- 判断 ESC 键(ASCII码27):
如果按下的是 ESC 键(对应的ASCII码是27),程序会调用cv.destroyAllWindows()关闭所有打开的窗口,不保存图像。 - 判断 s 键:
如果按下的是字母s键(ord('s')用来获取字符s的 ASCII 码),程序会执行两步:- 使用
cv.imwrite('catgray.png', img)将当前图像保存为名为'catgray.png'的文件。 - 然后调用
cv.destroyAllWindows()关闭所有窗口。
- 使用
三、视频读取-摄像头读取
(1)将视频文件或者摄像头作为数据源来创建VideoCapture对象。
(2)调用VideoCapture对象的read()方法获取视频中的帧,每一帧都是一幅图像。
(3)调用VideoWriter对象的write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
if not cap.isOpened():print("Cannot open camera")exit()
while True:# 逐帧捕获ret, frame = cap.read()# 如果正确读取帧,ret为Trueif not ret:print("Can't receive frame (stream end?). Exiting ...")breakframe = cv.flip(frame, 1)out.write(frame)# 我们在框架上的操作到这里gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 显示结果帧ecv.imshow('frame', frame)if cv.waitKey(1) == ord('q'):break
# 完成所有操作后,释放捕获器
cap.release()
out.release()
cv.destroyAllWindows()
- 通过摄像头实时捕获视频;
- 对每一帧进行水平镜像翻转;
- 将处理后的帧保存为视频文件,同时在屏幕上实时显示视频画面;
- 当用户按下
'q'键时,停止视频捕获并释放所有资源。

像这样,还挺有趣的哈哈
后面可以结合图像识别做更有趣的操作,学起来~
相关文章:
从0开始:OpenCV入门教程【图像处理基础】
图像处理基础 一、OpenCV主要功能及模块介绍 1、内置数据结构和输入/输出 OpenCV内置了丰富的与图像处理有关的数据结构,如Image、Point、Rectangle等。core模块实现了各种基本的数据结构。imgcodecs模块提供了图像文件的读写功能,用户使用简单的命令…...
区块链相关方法-SWOT分析
1.SWOT 一、定义:一种基于内外部竞争环境和竞争条件下的态势分析,通过对企业的内外环境所形成的优势(Strengths)、劣势(Weaknesses)、机会(Opportunities)和威胁(Threats࿰…...
React 前端框架介绍
什么是 React? React 是一个由 Facebook 开发并维护的开源 JavaScript 库,用于构建用户界面。它主要用于创建交互式用户界Face(UI),尤其是当数据变化时需要更新部分视图时非常有效。React 的核心思想是组件化和声明性编程,这使得开发者可以轻松地创建、组合和重用代码。…...
linux串口通讯
在当今的科技世界中,串口通讯虽然不像一些新兴的高速通信技术那般夺目,但它依然在众多领域有着不可替代的地位,尤其是在嵌入式系统开发、工业自动化控制等场景。而 Linux 系统,凭借其开源、稳定且强大的特性,为串口通讯提供了出色的支持。 一、串口通讯基础 串口通讯,简…...
鸿蒙app 开发中 对于数组方法 filter 的理解
这段代码是 TypeScript 中数组 filter 方法的类型定义,下面将详细解释其各个部分的含义、作用及使用场景。 整体功能概述 filter 方法是 JavaScript 和 TypeScript 中数组对象的一个内置方法,它的主要功能是创建一个新数组,新数组中的元素是…...
黄金市场现状与驱动因素分析
一、当前市场现状:挤兑、运力与供应链危机 全球金库告急与运输瓶颈 伦敦商业银行金库的黄金存量告急,纽约和伦敦市场出现“史诗级挤兑”。提取英格兰银行金库的黄金需等待4-8周,远高于常规的几天时间[citation:用户描述]。专业运输车辆超负荷…...
Scrum方法论指导下的Deepseek R1医疗AI部署开发
一、引言 1.1 研究背景与意义 在当今数智化时代,软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论,以其迭代式开发、快速反馈和高效协作的特点,在软件开发领域占据了重要地位。自 20 世纪 90 …...
大学本科教务系统设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点
以下是大学本科教务系统的设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点: 大学本科教务系统设计方案 一、需求分析 1. 核心用户角色 角色功能需求学生选课/退课、成绩查询、课表查看、学分统计、考试报名、学业预警教师成绩录入、课程大纲上传、教学进度管理、…...
个人环境配置--安装记录
根据显卡下载对应的cuda和cudnn 我使用的是docker,首先拉取镜像,我用的是ubuntu20.04 加速:pull hub.1panel.dev/ devel是开发版本 sudo docker pull hub.1panel.dev/nvidia/cuda:11.6.1-devel-ubuntu20.04先测试一下cuda有没有安装好 nvcc -V更新,安装…...
win10把c盘docker虚拟硬盘映射迁移到别的磁盘
c盘空间本身就比较小、如果安装了docker服务后,安装的时候没选择其他硬盘,虚拟磁盘也在c盘会占用很大的空间,像我的就三十多个G,把它迁移到其他磁盘一下子节约几十G 1、先输入下面命令查看 docker 状态 wsl -l -v 2、如果没有停止…...
开源的 LLM 应用开发平台-Dify 部署和使用
加粗样式 Dify 简介 官网 http://difyai.com/ 生成式 AI 应用创新引擎 开源的 LLM 应用开发平台 Dify 为开发者提供了健全的应用模版和编排框架,你可以基于它们快速构建大型语言模型驱动的生成式 AI 应用,将创意变为现实,也可以随时按需无…...
PHP Libxml:深入解析XML解析库及其在PHP中的应用
PHP Libxml:深入解析XML解析库及其在PHP中的应用 引言 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,广泛应用于Web服务、数据交换等领域。PHP作为一种流行的服务器端脚本语言,提供了强大的XML处理能力。Libxml是PHP中用于处理XML数据的核心库,本文将深入解…...
libxls库的编译以及基于Visual studio的配置
最近有一个需求在windows处理xls,所以就需要libxls这个库,调查了一下,基于C的库的解析情况如下: 所以最理想的就是Libxlsd个开源的方案 基于历史整理的 libxls 在 MinGW 下的编译步骤 前提条件 系统:Windows&#…...
抗辐照加固CAN FD芯片的商业航天与车规级应用解析
在工业自动化、智能汽车、航空航天及国防装备等关键领域,数据传输的安全性、可靠性与极端环境适应能力是技术升级的核心挑战。国科安芯推出全新一代CANFD(Controller Area Network Flexible Data Rate)芯片,以高安全、高可靠、断电…...
Python教学-最常用的标准库之一——OS库
os 库是 Python 标准库中的一个模块,它提供了一种方便的方式来使用操作系统相关的功能。os 模块提供了很多函数,可以用来处理文件和目录、访问环境变量、执行系统命令等。以下是一些常用的 os 模块的功能和示例: 1. 文件和目录操作 1.1 当前…...
Ollama+Deepseek+AnythingLLM搭建本地知识库
OllamaDeepseek的配置可以参考OllamaDeepseekopen-webui搭建本地知识库-CSDN博客 一,AnythingLLM安装 AnythingLLM官网地址AnythingLLM | The all-in-one AI application for everyone 下载 win64 下载完毕后安装。 二,AnythingLLM 配置 新建工作区 …...
合并区间(56)
56. 合并区间 - 力扣(LeetCode) 解法: class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size() 1) {return intervals;}//现根据每一项的第一个值&#…...
再探动态规划--背包问题
背包问题常见类型: 动态规划问题核心就两个:状态转移方程和遍历顺序 如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。 状态转移方程是动态规划问题中的核心&…...
Javascript使用Sodium库实现 aead_xchacha20poly1305_ietf加密解密,以及与后端的密文交互
Node.js环境安装 sodium-native (其他库可能会出现加密解密失败,如果要使用不一样的库,请自行验证) npm install sodium-native 示例代码,使用的是 sodium-native v4.3.2 (其他版本可能会有变化,如果要使用,请自行验…...
力扣-贪心-376 摆动序列
思路 记录前一个差值和后一个差值,需要分析很多情况 只有在发生波动的时候才更新差值——单调中有平坡前一个差值0时也更新差值——平坡留下最左边元素最后一个元素不记录.默认从最后一个有坡度 代码 class Solution { public:int wiggleMaxLength(vector<in…...
什么是“可迭代”
在 Python 中,“可迭代”(Iterable)是一个非常重要的概念,它指的是任何可以被逐个访问其元素的对象。换句话说,如果一个对象支持迭代操作(比如可以通过 for 循环逐个访问其元素),那么…...
【算法与数据结构】单调队列
目录 单调队列 使用单调队列维护滑动窗口 具体过程: 代码实现: 复杂度分析: 使用单调队列优化动态规划 例题 单调队列 单调队列(deque)是一种特殊的队列,队列中的元素始终按严格递增或者递减排列。这样就可以保证队头元素…...
Mysql-------事务
事务 一、事务 (一)什么是事务: MySQL数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,这些操作要么全做要么全不做,是一个不可分割的工作单位。 ※…...
【Java进阶学习 第五篇】JDK8、9中的接口新特性
接口新特性 可以提升代码的复用性,减少冗余 JDK8中接口的新特性主要可以允许调用默认方法和静态方法;JDK9中接口的新特性为可以运行调用私有方法供本类方法使用 JDK8新特性 接口中可以定义有方法体的方法(默认或静态) 允许调用…...
TypeScript学习:初学
安装等配置指令 安装TypeScript npm i typescript -g 检查版本 tsc -v npx tsc -v 运行ts文件及js文件 npx tsc 文件名.ts node 文件名.js 安装ts-node脚手架 npm i ts-node -g 检查脚手架版本 npx ts-node -v 初始化ts状态 npx tsc -- init 使用脚手架运行ts文件…...
基于Martin的全国基础底图实现
概述 前面有文章基于Martin实现MapboxGL自定义底图分享了Martin的使用,本文使用网络收集的数据实现了全国基础数据的收集和基础底图。 实现后效果 实现 1. 数据准备 实例中包含如下数据: 边界线和九段线数据省边界面数据省会城市点数据市边界面数据…...
网络安全:防范NetBIOS漏洞的攻击
稍微懂点电脑知识的朋友都知道,NetBIOS 是计算机局域网领域流行的一种传输方式,但你是否还知道,对于连接互联网的机器来讲,NetBIOS是一大隐患。 漏洞描述 NetBIOS(Network Basic Input Output System,网络基本输入输…...
一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili HTTP是无状态(stateless)协议。也就是说,在一次请求响应结束后,服务器不会留下任何关于对…...
机器学习面试八股文——决战金三银四
大家好,这里是好评笔记,公主 号:Goodnote,专栏文章私信限时Free。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点,内容通俗易懂,入门、实习和校招轻松搞定。 公主号合集地址 点击进入优惠地…...
Visual studio 2022 将打开文件的方式由单击改为双击
1. 打开vs2022,选择Tools -> Options打开Options设置页面 2. 在左侧依次展开Environment, 选择Tabs and Windows 3. 在右侧面板往下拖拽滚动条,找到Preview Tab section, unchecked "Preview selected files in Solution Explorer (Altclick t…...
