使用OpenCV处理视频并显示灰度图像

news2024/10/26 17:19:16

目录

    • 导入OpenCV库
    • 打开视频文件
    • 定义显示图像的函数
    • 检查视频是否成功打开并读取第一帧
    • 循环读取视频帧
    • 释放资源
    • 完整代码

导入OpenCV库

import cv2   # 导入OpenCV库

在这里插入图片描述

打开视频文件

在这里插入图片描述
在这里插入图片描述
注意:视频随便去搜一个就可以 我用的是风景的

# 打开视频文件
vc = cv2.VideoCapture('bg.mp4')

定义显示图像的函数

# 定义一个函数用于显示图像
def img_show(name, img):
    cv2.imshow(name, img)   # 显示图像
    cv2.waitKey(0)          # 按任意键退出
    cv2.destroyAllWindows()   # 关闭所有OpenCV创建的窗口

检查视频是否成功打开并读取第一帧

在这里插入图片描述

if vc.isOpened():
    # 如果视频打开成功,设置open为True
    # frame 为读取到的帧图像
    open, frame = vc.read()
    img_show('img(01)', frame)
else:
    # 如果视频打开失败,设置open为False
    open = False

循环读取视频帧

在这里插入图片描述

# 循环读取视频帧
while open:
    # 读取视频的下一帧,ret为布尔值表示是否成功读取,frame为帧图像
    ret, frame = vc.read()
    # 如果读取到的帧为空,跳出循环
    if frame is None:
        break
    # 如果成功读取到帧
    if ret == True:
        # 从视频流中读取帧
        # 将帧从BGR颜色空间转换为灰度空间
        # 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B
        # 这个公式反映了人眼对绿色的敏感度最高,对蓝色的敏感度最低。
        # 帧图的颜色通道为 BGR
        img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示灰度图像
        cv2.imshow('result', img_gray)
        # 等待10毫秒,如果按下Esc键(ASCII码为27),则退出循环
        if cv2.waitKey(10) & 0xFF == 27:
            break

释放资源

vc.release()   # 释放视频捕获对象
cv2.destroyAllWindows()   # 关闭所有OpenCV创建的窗口

完整代码

import cv2  # 导入OpenCV库

# 打开视频文件
vc = cv2.VideoCapture('bg.mp4')

# 定义一个函数用于显示图像
def img_show(name, img):
    cv2.imshow(name, img)  # 显示图像
    cv2.waitKey(0)         # 按任意键退出
    cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口

# 检查视频是否成功打开
if vc.isOpened():
    # 如果视频打开成功,设置open为True
    # frame 为读取到的帧图像
    open, frame = vc.read()
    img_show('img(01)', frame)
else:
    # 如果视频打开失败,设置open为False
    open = False

# 循环读取视频帧
while open:
    # 读取视频的下一帧,ret为布尔值表示是否成功读取,frame为帧图像
    ret, frame = vc.read()
    # 如果读取到的帧为空,跳出循环
    if frame is None:
        break
    # 如果成功读取到帧
    if ret == True:
        # 从视频流中读取帧
        # 将帧从BGR颜色空间转换为灰度空间
        # 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B
        # 这个公式反映了人眼对绿色的敏感度最高,对蓝色的敏感度最低。
        # 帧图的颜色通道为 BGR
        img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示灰度图像
        cv2.imshow('result', img_gray)
        # 等待10毫秒,如果按下Esc键(ASCII码为27),则退出循环
        if cv2.waitKey(10) & 0xFF == 27:
            break

vc.release()  # 释放视频捕获对象
cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口
👇 源码资料获取 · 技术与交流 👇

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu18.04系统中图形化界面

一、Ubuntu 18.04 中,使用 GDM 作为默认的图形用户界面(GUI)管理器。GDM 是 GNOME Display Manager 的缩写,它是用于 Ubuntu 的显示管理器,负责处理登录和会话管理。 通过命令行重启 Ubuntu 18.04 上的图形界面服务&am…

本地部署Ollama+千文大模型,docker openui访问

文章目录 前言 1. 运行Ollama 2. 安装Open WebUI 2.1 在Windows系统安装Docker 2.2 使用Docker部署Open WebUI 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具,并安装Open WebUI结合cpolar内网穿透软件,实现在公网环境也能访问…

回答网友从内存中执行函数的一个问题

事情是这样的 网友想调用dll,但是不想把dll释放到硬盘,想放在内存中。 俺的回答是:是从内存中,根据pe结构确定call的地址。 例子 先准备一个dll library dll; {$R *.res} function getValue(p1, p2: integer): integer; s…

Android开发首页底部tab切换图标有动画效果

Android开发首页底部tab切换图标有动画效果 主页tab切换很正常,但往往加上写动画更好看 一、思路: 用属性动画,并且事先准备多张图片,用于切换后播放动画 二、效果图: 单纯图看不出来,看下视频效果 An…

slam系列2:刚体坐标变换

线性代数的基础知识参考这篇:https://xin1999.blog.csdn.net/article/details/124779288 1. 刚体变换 刚体变换仅有旋转平移功能,矩阵模式表达为: a ′ R a t aRat a′Rat 齐次坐标就是在原n维坐标表示上增加了一个维度,使用n…

# 执行 rpm -qa | grep qq 查询软件安装情况时报错 数据库损坏 db3 error(-30974)

执行 rpm -qa | grep qq 查询软件安装情况时报错 数据库损坏 db3 error(-30974) 一、问题描述: 在 linux 系统上,使用包管理工具 rpm 查询某一个软件安装情况,如:执行 rpm -qa | grep qq 时,报错 数据库损坏 db3 err…

【升华】一个简单而标准的接口定义格式

一、前言 每天都在写很多接口,有的是有设计的接口,有的是无设计的接口。如果接口没有进行设计,也没有设计文档后期将很难扩展和维护。那么怎么简单定义一个简单而标准的Java的接口呢。下面给出格式。 二、JAVA接口设计文档 一个接口的定义一…

心觉:能让孩子卷则卷,但是度一定要把握好

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作198/1000天 现在家长普遍想让孩子考个好的学校,上好的幼儿园、小学、初中、高中甚至大学 为了上一个好的学校&#xf…

智能电子后视镜,汽车驾驶更安全,会是一种趋势

相比于传统的后视镜,智能电子后视镜的确有很多的优点。在下雨天和夜晚场景,电子后视镜可以说是表现优秀。 我之前一直以为我们国内是有规定不能使用电子后视镜。没想到,偶然刷到享界S9的视频,这电子后视镜,妥妥的给安排…

QD1-P21-P22 CSS 基础语法、注释、使用方法

本节学习:CSS 基础语法和注释,以及如何使用CSS定义的样式。 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p21 CSS 基本语法 CSS(层叠样式表)的基本语法相对简单,由选择器和一组包含在花括号 {}​ 中的声…

研发线上事故风险解读之缓存篇

专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》,进一步深入梳理线上事故缓存使用方面的问题点,重点关注缓存在使用和优化过程中可能出现的问题,旨在为读者提供具有实践指导意义的…

矩形函数的傅里叶变换——从一维到二维,从连续到离散

一维连续矩形函数的傅里叶变换 二维连续矩形函数的傅里叶变换 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P109 2D DFT 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系…

java计算机毕设课设—俄罗斯方块游戏(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式再最下方 java计算机毕设课设—俄罗斯方块游戏(附源码、文章、相关截图、部署视频) 基于Java的俄罗斯方块游戏,以提供一种既具娱乐性又具挑战性的游戏体验。通过精心设计的游戏界面和控制功能,该游戏不仅能够满…

STM32G474硬件I2C之配置方法

STM32G474硬件I2C接口:英文Inter-integrated circuit简写为I2C。STM32G474是M4核,在使用硬件I2C时,配置方法和M3核相差较大。通过阅读参考手册和HAL,总算了解了其配置原理。 1、I2C工作模式 I2C标准模式:最高时钟频率…

使用HTML和CSS实现3D波浪动画效果

使用HTML和CSS实现3D波浪动画效果 在本篇博客中,将详细介绍如何使用HTML与CSS创建一个3D波浪动画效果。这个效果不仅能够在网页中创建立体感强的视觉体验,还能够通过悬停和聚焦实现与用户的交互。我们将逐步解析代码中的每个部分,帮助你掌握…

探索Theine:Python中的AI缓存新贵

文章目录 探索Theine:Python中的AI缓存新贵背景:为何选择Theine?Theine是什么?如何安装Theine?简单的库函数使用方法场景应用场景一:Web应用缓存场景二:分布式系统中的数据共享场景三&#xff1…

使用WordPress从零开始搭建一个本地网站实现远程访问

文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站&#xff0c…

C语言网络编程深入研究

网络编程是现代软件开发中的一个重要部分,它允许不同计算机之间相互通信和交换数据。本指南将深入探讨使用C语言进行网络编程的技术细节,特别是TCP/IP协议族的核心概念和技术实现。我们将通过具体的代码示例来讨论如何创建客户端和服务器程序&#xff0c…

渗透测试 之 AD域渗透 【Kerberoasting】 攻击技术讲解 对应得工具详细介绍哟~ 以及相关示例 按照步骤做你也会哟

说明 Kerberoasting 攻击发生在Kerberos协议的TGS_REP阶段,KDC的TGS服务返回一个由服务Hash加密的ST给客户端。由于该ST是用服务Hash进行加密的,因此客户端在拿到该ST后可以用于本地离线爆破。 攻击的过程 攻击者提供一个正常的域用户密码对域进行身份…

拆解学习【STC宏晶MCU-CM1020电池保护】(一)

MIJIA米家USB-C充气宝1S: 米家这款充气宝内置2串18650锂电池为电机和控制板供电。控制板采用STC宏晶MCU进行气压测量和电机控制以及压力显示,内部电池保护板采用创芯微CM1020进行电池保护,并采用捷捷微MOS管进行开关控制。 LED数码管采用贴片LED二极管…