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

教程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 技术 苹果内购

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…...

云原生周刊: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时候修改过的配置文件

只要是石头&#xff0c;到哪里都不会发光的 bind 绑定主机某个网卡对应的IP地址&#xff0c;如果某个主机有两个网卡A和B&#xff0c;那么绑定了A&#xff0c;通过B连接就会无法访问protected-mode 保护模式 Yes为只能本地访问port 启动的端口号pidfile pid存放的位置&#xff…...

Stable Diffusion 本地部署教程

Stable Diffusion是一种用于构建和部署机器学习模型的开源工具。以下是在本地环境中部署 Stable Diffusion 的基本步骤: 步骤 1: 准备环境 确保你的系统中已经安装了以下软件和工具: Python(建议使用 Python 3.x)pip(Python 包管理工具)Docker(可选,用于容器化部署)…...

sql如何增加数据

在MySQL中增加数据主要是通过INSERT INTO SQL语句来实现的。以下是对插入语句的详细介绍以及举例说明&#xff1a; 1、插入语句的基本格式&#xff1a; 1INSERT INTO table_name (column1, column2, ..., columnN) 2VALUES (value1, value2, ..., valueN); table_name&#x…...

智慧交通(代码实现案例)

1.项目简介 目标: 了解智慧交通项目的架构知道智慧交通项目中的模块能够完成智慧交通项目的环境搭建 该项目是智慧交通项目&#xff0c;通过该项目掌握计算机视觉的方法在交通领域的相关应用&#xff0c;包括车道线检测的方法&#xff0c;多目标车辆追踪及流量统计方法&#…...

LeetCode 面试经典150题 205.同构字符串

题目&#xff1a; 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字…...

存内计算:释放潜能的黑科技

什么是存内计算&#xff1f; 存内计算技术是一种新型的计算架构&#xff0c;它将存储器和计算单元融合在一起&#xff0c;以实现高效的数据处理。存内计算技术的优势在于能够消除数据搬运的延迟和功耗&#xff0c;从而提高计算效率和能效比。目前&#xff0c;存内计算技术正处…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...