教程1_图像视频入门
一、图像入门
1、cv2.imread()函数
cv2.imread() 是 OpenCV 库中的一个函数,用于读取图像文件。下面是 cv2.imread() 函数的基本介绍和使用方法:
函数定义
cv2.imread(filename, flags=cv2.IMREAD_COLOR)
参数
filename:要读取的图像的路径和文件名。flags:这是一个可选参数,用于指定读取图像的方式。常用的选项有:cv2.IMREAD_COLOR:默认参数,读取一张彩色图像。这是任何图像加载的默认标志。cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。cv2.IMREAD_UNCHANGED:读取图像,包括其 alpha 通道(如果存在)。
返回值
如果成功读取图像,该函数将返回一个多维 numpy 数组,代表图像的像素值。如果无法读取图像(例如,文件不存在或格式不支持),则返回 None。
2、cv2.imshow()函数
是 OpenCV 库中的一个函数,用于在窗口中显示图像。这个函数允许开发者将图像数据可视化,使得用户可以直观地查看和分析图像内容。
函数定义
cv2.imshow(winname, mat)
参数
winname:一个字符串,表示窗口的名字。通过这个窗口名,我们可以引用、移动或关闭这个特定的窗口。mat:要显示的图像。这通常是一个由cv2.imread()函数加载的图像,或者是一个通过其他 OpenCV 函数处理后的图像。
返回值
cv2.imshow() 函数本身没有返回值。它的主要目的是在屏幕上显示图像。
3、cv2.waitKey()函数
cv2.waitKey() 和 cv2.destroyAllWindows() 是 OpenCV 库中用于控制图像显示窗口的两个重要函数。这两个函数通常与 cv2.imshow() 一起使用,以实现图像显示的交互性。
cv2.waitKey() 函数用于等待一个特定的键盘按键事件。它在显示图像后使程序暂停执行,直到用户按下一个键或者等待指定的时间。
函数定义
cv2.waitKey(delay=None)
参数
delay:等待键盘输入的时间(以毫秒为单位)。如果参数为0,则函数会无限期地等待,直到用户按下一个键。
返回值
cv2.waitKey() 返回按下的键的ASCII码。如果在指定的延迟时间内没有键被按下,则返回-1。
使用方法
cv2.waitKey() 常用于创建一个简单的键盘事件循环,让用户有机会查看和交互图像。通常,它放在 cv2.imshow() 后面,以便在显示图像后暂停程序。
4、cv2.destroyAllWindows()函数
cv2.destroyAllWindows() 函数用于关闭所有由 OpenCV 创建的高GUI窗口。 在显示图像并等待用户交互后,通常使用 cv2.destroyAllWindows() 来清理并关闭所有打开的窗口。这是一个良好的编程实践,可以确保资源得到正确释放,并避免程序结束时留下悬挂的窗口。
5、示例演示
import cv2 # 读取彩色图像
color_image = cv2.imread('path_to_image.jpg', cv2.IMREAD_COLOR) # 读取灰度图像
gray_image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE) # 检查图像是否成功读取
if color_image is not None: cv2.imshow('Color Image', color_image) # 等待用户按键,参数0表示无限期等待 key = cv2.waitKey(0) # 根据按键执行不同的操作(可选) if key == ord('q'): # 如果按下'q'键 # 关闭所有OpenCV窗口 cv2.destroyAllWindows()
else: print("Error: Unable to load image.")
二、视频入门
1、读取摄像机视频
通常情况下,我们必须用摄像机捕捉实时画面。提供了一个非常简单的界面。让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来。只是一个简单的任务开始。
要捕获视频,你需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接(就像我的情况一样)。所以我简单地传0(或-1)。你可以通过传递1来选择第二个相机,以此类推。在此之后,你可以逐帧捕获。
import numpy as np
import cv2 as cv # 创建一个VideoCapture对象,参数0表示使用计算机的第一个摄像头
cap = cv.VideoCapture(0) # 检查摄像头是否成功打开
if not cap.isOpened(): print("无法打开摄像头") exit() # 无限循环,直到遇到退出条件
while True: # 逐帧捕获视频 # ret是一个布尔值,如果正确读取帧,则ret为True;否则为False # frame是读取到的帧图像 ret, frame = cap.read() # 检查是否成功读取到帧 if not ret: print("无法接收帧(流结束?)。正在退出...") break # 将图像从BGR颜色空间转换为灰度颜色空间 gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 显示转换后的灰度图像 cv.imshow('frame', gray) # 等待键盘输入,参数1表示等待时间为1毫秒 # 如果按下'q'键,则退出循环 if cv.waitKey(1) == ord('q'): break # 释放VideoCapture对象,关闭摄像头
cap.release() # 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()
这段代码实现了一个简单的摄像头视频流捕获和显示程序。它使用OpenCV库来从计算机摄像头捕获视频帧,将每帧图像转换为灰度图像,并在窗口中显示。当按下'q'键时,程序将退出。在退出前,它会释放摄像头资源并销毁所有OpenCV创建的窗口。
2、读取保存的文件视频
它与从相机捕获相同,只是用视频文件名更改摄像机索引。另外,在显示框架时,请使用适当的时间cv.waitKey()。如果太小,则视频将非常快,而如果太大,则视频将变得很慢(嗯,这就是显示慢动作的方式)。正常情况下25毫秒就可以了,或者使用sleep延时来代替(带验证)。
import numpy as np
import cv2 as cv # 使用cv2.VideoCapture方法读取名为'vtest.avi'的视频文件
cap = cv.VideoCapture('vtest.avi') # 当视频流处于打开状态时,循环读取视频帧
while cap.isOpened(): # 读取视频帧,ret是读取是否成功的标志,frame是读取到的视频帧 ret, frame = cap.read() # 如果ret为False,说明没有成功读取到视频帧(可能是视频已播放完毕) # 打印提示信息,并退出循环 # 如果正确读取帧,ret为True if not ret: print("无法接收帧(视频结束?)。正在退出...") break # 将读取到的视频帧从BGR颜色空间转换为灰度颜色空间 gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 使用cv2.imshow方法显示灰度视频帧,窗口名为'frame' cv.imshow('frame', gray) # 等待键盘输入,参数1表示等待时间为1毫秒 # 如果按下'q'键,则退出循环 if cv.waitKey(1) == ord('q'): break # 释放VideoCapture对象,关闭视频文件
cap.release() # 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()
相关文章:
教程1_图像视频入门
一、图像入门 1、cv2.imread()函数 cv2.imread() 是 OpenCV 库中的一个函数,用于读取图像文件。下面是 cv2.imread() 函数的基本介绍和使用方法: 函数定义 cv2.imread(filename, flagscv2.IMREAD_COLOR) 参数 filename:要读取的图像的路…...
MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误
参考MQTT.fx和MQTTX 链接ONENET物联网开发平台避坑细节干货。_mqttx和mqttfx-CSDN博客 在输入password和username后还是提示错误,是因为在使用token的时候,key填写错误,将设备的密钥填入key中...
Svn添加用户、添加用户组、配置项目权限等自动化配置脚本
实现在工作中自动化配置svn用户、用户组、和项目权限的脚本,在使用过程中如果有什么问题,可以联系我。 移步到gitee: svn account permission management: Svn账号、组、权限管理脚本 (gitee.com)...
Spring事务-两种开启事务管理的方式:基于注解的声明式事务管理、基于编程式的事务管理
Spring事务-两种开启事务管理的方式 1、前期准备2、基于注解的声明式事务管理3、基于编程式的事务管理4、声明式事务失效的情况 例子:假设有一个银行转账的业务,其中涉及到从一个账户转钱到另一个账户。在这个业务中,我们需要保证要么两个账户…...
OC 技术 苹果内购
一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络࿰…...
云原生周刊:Kubernetes v1.30 一瞥 | 2024.3.25
开源项目推荐 Retina Retina 是一个与云无关的开源 Kubernetes 网络可观测平台,它提供了一个用于监控应用程序运行状况、网络运行状况和安全性的集中中心。它为集群网络管理员、集群安全管理员和 DevOps 工程师提供可操作的见解,帮助他们了解 DevOps、…...
2016年认证杯SPSSPRO杯数学建模D题(第一阶段)NBA是否有必要设立四分线解题全过程文档及程序
2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现 NBA 联盟从 1946 年成立到今天,一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的,比如 1973 年在技术统计中增加了抢断和盖帽数据;有应运而生、力挽狂澜的&am…...
EdgeGallery开发指南
API接口 简介 EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示(融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能,通过浏览器访问时打开的是融合前端的界面,通过IP:Port/urlPref…...
ubuntu arm qt 读取execl xls表格数据
一,ubuntu linux pc编译读取xls的库 1,安装libxls(读取xls文件 电脑版) 确保你已经安装了基本的编译工具,如gcc和make。如果没有安装,可以使用以下命令安装: sudo apt-update sudo apt-get install build-essentia…...
STM32 使用gcc编译介绍
文章目录 前言1. keil5下的默认编译工具链用的是哪个2. Arm编译工具链和GCC编译工具链有什么区别吗?3. Gcc交叉编译工具链的命名规范4. 怎么下载gcc-arm编译工具链参考资料 前言 我们在STM32上进行开发时,一般都是基于Keil5进行编译下载,Kei…...
FPGA之组合逻辑与时序逻辑
数字逻辑电路根据逻辑功能的不同,可以分成两大类:组合逻辑电路和时序逻辑电路,这两种电路结构是FPGA编程常用到的,掌握这两种电路结构是学习FPGA的基本要求。 1.组合逻辑电路 组合逻辑电路概念:任意时刻的输出仅仅取决…...
git clone没有权限的解决方法
一般情况 git clone时没有权限,一般是因为在代码库平台上没有配置本地电脑的id_rsa.pub 只要配置上,一般就可以正常下载了。 非一般情况 但是也有即使配置了id_rsa.pub后,仍然无法clone代码的情况。如下 原因 这种情况是因为ssh客户端…...
Redis 的内存回收策略
Redis的内存回收策略用于处理过期数据和内存溢出情况,确保系统稳定性和性能。作为一个高性能的键值存储系统,它通过内存回收策略来维护内存的高效使用 主要包括过期删除策略和内存淘汰策略。 过期删除策略: Redis的过期删除策略是通过设置…...
小程序富文本图片宽度自适应
解决这个问题 创建一个util.js文件,图片的最大宽度设置为100%就行了 function formatRichText(html) {let newContent html.replace(/\<img/gi, <img style"max-width:100%;height:auto;display:block;");return newContent; }module.exports {formatRichT…...
安装redis时候修改过的配置文件
只要是石头,到哪里都不会发光的 bind 绑定主机某个网卡对应的IP地址,如果某个主机有两个网卡A和B,那么绑定了A,通过B连接就会无法访问protected-mode 保护模式 Yes为只能本地访问port 启动的端口号pidfile pid存放的位置ÿ…...
Stable Diffusion 本地部署教程
Stable Diffusion是一种用于构建和部署机器学习模型的开源工具。以下是在本地环境中部署 Stable Diffusion 的基本步骤: 步骤 1: 准备环境 确保你的系统中已经安装了以下软件和工具: Python(建议使用 Python 3.x)pip(Python 包管理工具)Docker(可选,用于容器化部署)…...
sql如何增加数据
在MySQL中增加数据主要是通过INSERT INTO SQL语句来实现的。以下是对插入语句的详细介绍以及举例说明: 1、插入语句的基本格式: 1INSERT INTO table_name (column1, column2, ..., columnN) 2VALUES (value1, value2, ..., valueN); table_name&#x…...
智慧交通(代码实现案例)
1.项目简介 目标: 了解智慧交通项目的架构知道智慧交通项目中的模块能够完成智慧交通项目的环境搭建 该项目是智慧交通项目,通过该项目掌握计算机视觉的方法在交通领域的相关应用,包括车道线检测的方法,多目标车辆追踪及流量统计方法&#…...
LeetCode 面试经典150题 205.同构字符串
题目: 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字…...
存内计算:释放潜能的黑科技
什么是存内计算? 存内计算技术是一种新型的计算架构,它将存储器和计算单元融合在一起,以实现高效的数据处理。存内计算技术的优势在于能够消除数据搬运的延迟和功耗,从而提高计算效率和能效比。目前,存内计算技术正处…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
