使用 OpenCV 读取和显示图像与视频
概述
OpenCV 是一个强大的计算机视觉库,广泛应用于图像处理和视频处理等领域。本文将详细介绍如何使用 OpenCV 在 Python 中读取和显示图像以及视频,并通过具体的代码示例来展示整个过程。
环境准备
在开始之前,请确保已经安装了 OpenCV 库。如果没有安装,可以通过以下命令进行安装:
pip install opencv-python
完整代码
import cv2def read_img():"""读取图片:return:"""img = cv2.imread(r'./resources/lena.jpeg')cv2.imshow('lena img', img)cv2.waitKey(0)def read_video():"""读取视频/摄像头:return:"""# 视频路径为获取资源,id序号则为摄像头id,0为默认第一个摄像头idcap = cv2.VideoCapture(r'./resources/video.mp4')# cap = cv2.VideoCapture(0)# cap propId 0-18cap.set(3, 800) # 3为宽cap.set(4, 600) # 4为高cap.set(10, 5) # 10为亮度while True:success, img = cap.read()if success:cv2.imshow('video', img)else:breakif cv2.waitKey(1) & 0xFF == ord('q'):# 有按键则返回按键ASCII码,无按键则返回-1# 取按键返回ASCII码二进制后8位,为按键'q'退出循环breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':# read_img()read_video()
示例代码详解
1. 读取和显示图像
import cv2def read_img():"""读取图片:return:"""img = cv2.imread(r'./resources/lena.jpeg')cv2.imshow('lena img', img)cv2.waitKey(0)
-
读取图像:
img = cv2.imread(r'./resources/lena.jpeg')- 使用
cv2.imread()函数读取图像文件。路径使用原始字符串(r'...')以避免转义字符的问题。
- 使用
-
显示图像:
cv2.imshow('lena img', img) cv2.waitKey(0)- 使用
cv2.imshow()函数显示图像。第一个参数是窗口名称,第二个参数是要显示的图像。 cv2.waitKey(0)使程序等待用户按键后退出。0表示无限期等待。
- 使用
2. 读取和显示视频
def read_video():"""读取视频/摄像头:return:"""# 视频路径为获取资源,id序号则为摄像头id,0为默认第一个摄像头idcap = cv2.VideoCapture(r'./resources/video.mp4')# cap = cv2.VideoCapture(0)# cap propId 0-18cap.set(3, 800) # 3为宽cap.set(4, 600) # 4为高cap.set(10, 5) # 10为亮度while True:success, img = cap.read()if success:cv2.imshow('video', img)else:breakif cv2.waitKey(1) & 0xFF == ord('q'):# 有按键则返回按键ASCII码,无按键则返回-1# 取按键返回ASCII码二进制后8位,为按键'q'退出循环breakcap.release()cv2.destroyAllWindows()
-
读取视频或摄像头:
cap = cv2.VideoCapture(r'./resources/video.mp4') # cap = cv2.VideoCapture(0)- 使用
cv2.VideoCapture()函数读取视频文件或摄像头。传入视频文件路径或摄像头ID(例如0表示默认摄像头)。
- 使用
-
设置视频属性:
cap.set(3, 800) # 3为宽 cap.set(4, 600) # 4为高 cap.set(10, 5) # 10为亮度- 使用
cap.set()方法设置视频捕获属性。参数3表示宽度,4表示高度,10表示亮度。
- 使用
-
读取和显示视频帧:
while True:success, img = cap.read()if success:cv2.imshow('video', img)else:break- 使用
cap.read()方法读取视频帧。如果读取成功,success为True,img为当前帧的图像;否则,success为False,表示视频结束或读取失败。
- 使用
-
按键检测:
if cv2.waitKey(1) & 0xFF == ord('q'):break- 使用
cv2.waitKey(1)等待1毫秒,如果有按键按下,则返回按键的ASCII码。& 0xFF用于取按键ASCII码的后8位。ord('q')返回字符 ‘q’ 的ASCII码。如果按键为 ‘q’,则退出循环。
- 使用
-
释放资源:
cap.release() cv2.destroyAllWindows()- 使用
cap.release()释放视频捕获对象。 - 使用
cv2.destroyAllWindows()关闭所有OpenCV窗口。
- 使用
主函数
if __name__ == '__main__':# read_img()read_video()
- 主函数:
if __name__ == '__main__':确保当脚本直接运行时才执行以下代码。- 调用
read_img()或read_video()函数来读取和显示图像或视频。
总结
本文详细介绍了如何使用 OpenCV 在 Python 中读取和显示图像以及视频,并通过具体的代码示例展示了整个过程。通过使用 cv2.imread()、cv2.imshow()、cv2.VideoCapture() 和 cv2.waitKey() 等函数,我们可以轻松地处理图像和视频数据。
希望本文能帮助你在实际项目中更好地应用 OpenCV 进行图像和视频处理。如果有任何疑问或需要进一步的帮助,请随时提问!
以上就是关于使用 OpenCV 读取和显示图像与视频的技术讲解,希望对你的学习和实践有所帮助!如果有任何疑问或需要进一步的帮助,请随时提问!
相关文章:
使用 OpenCV 读取和显示图像与视频
概述 OpenCV 是一个强大的计算机视觉库,广泛应用于图像处理和视频处理等领域。本文将详细介绍如何使用 OpenCV 在 Python 中读取和显示图像以及视频,并通过具体的代码示例来展示整个过程。 环境准备 在开始之前,请确保已经安装了 OpenCV 库…...
【1】Elasticsearch 30分钟快速入门
文章目录 一、Elasticsearch 基本概念及工作原理(一)基本概念(二)工作原理二、Elasticsearch 原生 RESTful 方式的增删改查(一)创建索引(二)插入文档(三)查询文档(四)更新文档(五)删除文档(六)删除索引三、Python SDK 实现增删改查(一)安装 Elasticsearch Py…...
教材管理系统设计与实现
教材管理系统设计与实现 1. 系统概述 教材管理系统是一个基于PHP和SQL的Web应用程序,旨在为学校提供一个高效的教材管理平台。该系统可以帮助管理员录入教材信息、教师查询和申请教材、学生查询教材信息,提高教材管理的效率和透明度。 2. 技术栈 前端…...
软考(中级-软件设计师)数据库篇(1101)
第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库(Database ,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展…...
安装nscd及glibc包冲突降级【centos7】
安装nscd及glibc包冲突降级【centos7】 一、查看当前glibc版本二、查找可用的glibc版本三、备份系统和数据四、降级glibc五、验证降级是否成功六、解决其他依赖问题七、测试和验证八、考虑使用容器技术endl [08:41:07 rootcentos7 ~]# yum -y install nscd Loaded plugins: fas…...
Qt字符编码
目前字符编码有以下几种: 1、UTF-8 UTF-8编码是Unicode字符集的一种编码方式(CEF),其特点是使用变长字节数(即变长码元序列、变宽码元序列)来编码。一般是1到4个字节,当然,也可以更长。 2、UTF-16 UTF-16是Unicode字符编码五层次…...
Ubuntu用docker安装AWVS和Nessus(含破解)
Ubuntu安装AWVS(更多搜索:超详细Ubuntu用docker安装AWVS和Nessus) 首先安装docker,通过dockers镜像安装很方便,且很快;Docker及Docker-Compose-安装教程。 1.通过docker search awvs命令查看镜像; docker search awvs…...
tauri开发中如果取消了默认的菜单项,复制黏贴撤销等功能也就没有了,解决办法
取消默认的菜单项:清除tauri默认的菜单项,让顶部的菜单menu不显示-CSDN博客 就是通过配置空菜单,让菜单不显示,但是这个引发的问题就是复制黏贴撤销等功能也就没有了,解决办法: 新增加编辑下的子菜单&…...
HNU-小学期-专业综合设计
写在前面 选题:大数据技术-智慧交通预测系统 项目github地址(如果有用麻烦点个star与follow):https://github.com/wolfvoid/HNU-ITPS (全部代码以及如何部署参见README) 项目报告:如下&…...
Linux安装es和kibana
安装Elasticsearch 参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html#targz-enable-indices 基本步骤下载包,解压,官网提示: wget https://artifacts.elastic.co/downloads/elasticsearc…...
第二十六章 Vue之在当前组件范围内获取dom元素和组件实例
目录 一、概述 二、获取dom 2.1. 具体步骤 2.2. 完整代码 2.2.1. main.js 2.2.2. App.vue 2.3. BaseChart.vue 三、获取组件实例 3.1. 具体步骤 3.2. 完整代码 3.2.1. main.js 3.2.2. App.vue 3.2.3. BaseForm.vue 3.3. 运行效果 一、概述 我们过去在想要获取一…...
Markdown 区块
再段落开头,使用>符号,在符号后面按空格,效果图是最左侧有一条灰色的粗线,这是一级区块 二级区块和三级区块只需要在一级的后面加>符号,就可以进入二级区块,效果如下图 还可以在区块内部签到无序列表…...
ctf文件上传题小总结与记录
解题思路:先看中间件,文件上传点(字典扫描,会员中心),绕过/验证(黑名单,白名单),解析漏洞,cms,编辑器,最新cve 文件上传漏…...
什么是QAM
什么是调制呢? 调制就是把信号形式转换成适合在信道中传输的一个过程。可分为基带调制和载波调制。我们这里所说的调制都是载波调制。 什么是载波调制呢? 就是把调制信号骑到载波上,方法就是用调制信号去控制载波的参数,使载波…...
GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序
作者:来自 Elastic Praveen Durairaju GraphQL 提供了一种高效且灵活的数据查询方式。本博客将解释 Hasura DDN 如何与 Elasticsearch 配合使用,以实现高性能和元数据驱动的数据访问。 此示例的代码和设置可在此 GitHub 存储库 - elasticsearch-subgraph…...
面试题整理 3
总结了某公司面试遇到的值得整理记录的面试题,比较侧重于Redis方面。 目录 Redis持久化配置 RDB AOF Redis rdb日志文件路径编辑 命令行参数设置 Redis事务 Redis事务介绍 Redis事务阶段 watch监听 Mysql隔离级别 1.READ UNCOMMITTED 2.READ COMMITTED …...
数据结构(Java)—— 认识泛型
1. 包装类 在学习泛型前我们需要先了解一下包装类 在 Java 中,由于基本类型不是继承自 Object ,为了在泛型代码中可以支持基本类型, Java 给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 基本数据类型包装类byteByt…...
处理后的视频如何加上音频信息?
总方案:原来模型对图像进行每帧处理,保留后的视频自然失去了audio信息,因此先用ffmpeg处理得到audio,原输出video加上audio即可,也采用ffmpeg处理。 imageio库用于读取和写入视频文件,并且你正在使用img_cartoon模型处理每一帧图像。然而,这段代码只处理了视频的图像部…...
02LangChain 实战课——安装入门
LangChain安装入门 一、大语言模型简介 大语言模型是利用深度学习技术,尤其是神经网络,来理解和生成人类语言的人工智能模型。这些模型因其庞大的参数数量而得名,能够理解和生成复杂的语言模式。它们通过预测下一个词来训练,基于…...
Python函数中关键字参数、位置参数、默认参数有何不同
在Python中,函数的参数分为三种类型:关键字参数(key arguments)、位置参数(positional arguments)和默认参数(default arguments)。它们的主要区别在于调用时如何传递值,…...
3大创新方法构建AI训练数据集:老照片修复实战指南
3大创新方法构建AI训练数据集:老照片修复实战指南 【免费下载链接】Bringing-Old-Photos-Back-to-Life Bringing Old Photo Back to Life (CVPR 2020 oral) 项目地址: https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life 老照片修复AI项目…...
两行代码实现全自动网页翻译:translate.js 终极指南
两行代码实现全自动网页翻译:translate.js 终极指南 【免费下载链接】translate Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly! 项目地址: https://gitcode.com/…...
OpenClaw灾难恢复:Qwen3-32B-Chat配置备份与快速重建
OpenClaw灾难恢复:Qwen3-32B-Chat配置备份与快速重建 1. 为什么需要自动化备份策略 上周五凌晨三点,我的开发机突然宕机。硬盘故障导致OpenClaw所有配置和Qwen3-32B-Chat模型接入设置全部丢失——这个教训让我意识到:个人开发环境同样需要企…...
CAPL调用DLL实现UDS 27服务加密算法:从C代码到Vector环境的完整打通
CAPL调用DLL实现UDS 27服务加密算法:从C代码到Vector环境的完整打通 在汽车电子测试领域,UDS(Unified Diagnostic Services)协议的安全访问(27服务)是保护ECU免受未授权访问的关键机制。当我们需要在Vector…...
通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力
通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力 最近在折腾一些边缘设备上的AI应用,发现一个挺有意思的现象:大家一提到部署大模型,脑子里蹦出来的第一个念头往往是“得找个性能强劲的服务…...
常量和常量表达式1
一、基础定义(C/C通用核心定义) 1. 常量(Constant) 程序整个生命周期内值不可修改、固定不变的量,是值的实体(单个固定值/命名固定值),其值的确定时机可在编译期/预处理期࿰…...
PMSM无感控制中滑模观测器的相位补偿与抖振优化
1. 滑模观测器在PMSM无感控制中的核心作用 永磁同步电机(PMSM)的无位置传感器控制技术中,滑模观测器(SMO)扮演着关键角色。这种控制方式不需要物理位置传感器,而是通过算法实时估算转子位置和速度。我在实…...
Rustup工具链管理深度解析:多版本Rust环境实战指南
Rustup工具链管理深度解析:多版本Rust环境实战指南 【免费下载链接】rustup The Rust toolchain installer 项目地址: https://gitcode.com/gh_mirrors/ru/rustup Rustup作为Rust语言的官方工具链管理器,为开发者提供了稳定、测试版和夜间版多版本…...
3大突破!AnythingLLM让多格式文档处理效率提升10倍
3大突破!AnythingLLM让多格式文档处理效率提升10倍 【免费下载链接】anything-llm 这是一个全栈应用程序,可以将任何文档、资源(如网址链接、音频、视频)或内容片段转换为上下文,以便任何大语言模型(LLM&am…...
Claude Code架构深度解析:从核心文件到Harness的确定性控制体系
前言 Claude Code凭借强大的代码理解、编辑与执行能力,成为AI研发工程师的高效工具,但多数使用者仅停留在功能调用层面,对其底层架构尤其是核心控制层Harness知之甚少。作为Claude Code架构师,本文将从项目架构视角,拆…...
