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

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

目录

    • 导入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为Falseopen = 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# 这个公式反映了人眼对绿色的敏感度最高,对蓝色的敏感度最低。# 帧图的颜色通道为 BGRimg_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为Falseopen = 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# 这个公式反映了人眼对绿色的敏感度最高,对蓝色的敏感度最低。# 帧图的颜色通道为 BGRimg_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示灰度图像cv2.imshow('result', img_gray)# 等待10毫秒,如果按下Esc键(ASCII码为27),则退出循环if cv2.waitKey(10) & 0xFF == 27:breakvc.release()  # 释放视频捕获对象
cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口
👇 源码资料获取 · 技术与交流 👇

在这里插入图片描述


http://www.mrgr.cn/news/49076.html

相关文章:

  • 通过多元蒙特卡罗模拟来预测股票价格的日内波动性
  • 文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及状态量平均超限比的综合能源系统动态能量流双层优化》
  • C++模板初阶速成
  • 分享一些常用的数据库性能监测工具
  • 强基计划揭秘、攻略、机遇全知晓,开启普通学子名校逆袭路
  • Qt-系统文件相关介绍使用(61)
  • GeoScene Pro教程(009):GeoScenePro的空间参考与坐标转换
  • Python Enhancement Proposals,Python 增强提案
  • Python 列表专题:删除元素
  • 【最新华为OD机试E卷-支持在线评测】构成正方形的数量(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题
  • docker-compose 部属netcore
  • 设计一个多环境配置管理系统的实用指南
  • 第十五章:组织保障(15.1信息和文档管理--15.2配置管理)
  • C++学习笔记----9、发现继承的技巧(一)---- 使用继承构建类(1)
  • Mysql(九) --- 事务
  • AI大师工坊文心智能体:雪季旅行者
  • (33)MATLAB信号分析之信号功率、噪声功率、与信噪比
  • 思迅孕婴童重置1001所有权限的语句
  • 麒麟操作系统:解决umount命令卸载USB存储设备时报“device is busy”错误