计算机视觉OpenCv学习系列:第九部分、视频读写

news2024/12/27 12:36:02

第九部分、视频读写

    • 第一节、视频读写处理
      • 1.视频标准与格式
      • 2.视频读写与函数
      • 3.代码练习与测试
    • 学习参考

第一节、视频读写处理

1.视频标准与格式


视频标准与格式:

  • SD(Standard Definition)标清480P
  • HD(High Definition)高清720P/1080P
  • UHD(Ultra High Definition)超高清4K/2160P

分辨率表示

  • SD-640x480, 704x480, 720x480, 848x480等
  • HD-960x720,1280x720,1440x1080,1920x1080
  • UHD-4K,2160P

图片压缩的时候清晰度选取越高,所占内存也越大。

在这里插入图片描述

2.视频读写与函数


在这里插入图片描述

  • filename表示视频文件
  • Index表示USB摄像头或者web camera的索引,index = 0表示电脑自带的摄像头
  • apiPreference = CAP_ANY意思自动决定第三方视频库如: cv.CAP_FFMPEG, cv.CAP_DSHOW,OpenCV并没有自己集成视频的编码与解码,所以需要自己指定使用哪个第三方库来完成视频读写。多数情况不设这个参数,让电脑自行选择。
# VideoCaput的get方法
1.cv.CAP_PROP_FRAME_WIDT  # 每一帧的宽
2.cv.CAP_PROP_FRAME_HEIGHT  # 每一帧的高度
3.cv.CAP_PROP_FPS  # 每一秒多少张图(帧数)
# 帧越高计算机处理能力越强,一秒钟30帧观感比较好,当一秒超过3帧的时候我们就认为他是连续播放图片(视频)
4.cv.CAP_PROP_FOURCC  # 获取视频编码格式(MP4,AVI等等)
5.cv.CAP_PROP_FRAME_COUNT  # 视频流总帧数

cv.VideoWriter( 
filename, 保存文件名称
fourcc, 编码方式
fps,  帧率
frameSize 视频帧大小,与实现大小相符(取决于接收方电脑1s能跑多少帧)
[, isColor]	) ->	<VideoWriter object>

当视频无法保存时可能是fps帧率=0,或者设定的framesize大小与电脑实际运行返回的framesize大小不一致。

3.代码练习与测试


注意:摄像头的权限控制与释放,当我们使用完摄像头之后要释放资源。

  • cap.release()
  • writer.release()
# 视频读写处理
def video_demo():
    # 读取视频文件
    cap = cv.VideoCapture(r"F:\python\opencv-4.x\samples\data\vtest.avi")
    # 获取视频帧率fps
    fps = cap.get(cv.CAP_PROP_FPS)
    # 获取每帧的宽度
    frame_w = cap.get(cv.CAP_PROP_FRAME_WIDTH)
    # 获取每帧的高度
    frame_h = cap.get(cv.CAP_PROP_FRAME_HEIGHT)
    print("fps:", fps, "frame_w", frame_w, "frame_h", frame_h)
    # 编码方式
    # 指定编码方式为vp09
    # fourcc = cv.VideoWriter_fourcc(*'vp09')
    # 计算机自动获取编码格式
    fourcc = cap.get(cv.CAP_PROP_FOURCC)
    # 注意将编码格式fourcc转换成int类型
    # 定义写入一个视频
    writer_mp4 = cv.VideoWriter('output.mp4', int(fourcc), fps, (int(frame_w), int(frame_h)))
    # 循环读取图片完成视频
    while True:
        # 摄像头读取,ret为是否成功打开摄像头,true,false。 frame为视频的每一帧图像
        ret, frame = cap.read()
        if ret is not True:
            break
        cv.imshow("frame", frame)
        # 间隔1ms播放下一帧
        c = cv.waitKey(1)
        if c == 27:
            break
        # 写入视频帧,注意初始的帧数要和实际返回帧数一致
        writer_mp4.write(frame)

    # 释放资源
    cap.release()
    writer_mp4.release()

    cv.waitKey(0)
    cv.destroyAllWindows()
    # 视频文件执行之后会有警告但是不影响使用

结果示例:

在这里插入图片描述

# 调用摄像头读写
def video_face_demo():
    # 程序执行开始时间
    a = time.time()
    print(a)
    # 读取视频文件
    cap = cv.VideoCapture(0)
    # # 更改分辨率大小和fps大小
    # cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
    # cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 960)
    # cap.set(cv2.CAP_PROP_FPS, 70)
    # resize = (int(cap.get(cv.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)))
    # print(resize)

    # 获取视频帧率fps
    fps = cap.get(cv.CAP_PROP_FPS)
    # 获取每帧的宽度
    frame_w = cap.get(cv.CAP_PROP_FRAME_WIDTH)
    # 获取每帧的高度
    frame_h = cap.get(cv.CAP_PROP_FRAME_HEIGHT)
    print("fps:", fps, "frame_w", frame_w, "frame_h", frame_h)
    # 记录调用时长
    print(time.time() - a)
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
    while True:
        # 获取每一帧的帧率
        fps = cap.get(cv.CAP_PROP_FPS)
        print(fps)
        # 摄像头读取,ret为是否成功打开摄像头,true,false。 frame为视频的每一帧图像
        ret, frame = cap.read()
        # 摄像头是和人对立的,将图像垂直翻转
        frame = cv2.flip(frame, 1)
        cv.imshow("video", frame)
        # 10ms显示一张图片
        c = cv.waitKey(10)
        if c == 27:
            break

    # 释放资源
    cap.release()
    cv.waitKey(0)
    cv.destroyAllWindows()
    # 视频文件执行之后会有警告但是不影响使用

学习参考

本系列所有OpenCv相关的代码示例和内容均来自博主学习的网站:opencv_course

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

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

相关文章

100 个手把手、掏心窝子IDEA快捷键从入门到精通教程

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 一、构建/编译 Ctrl F9&…

c++函数返回数组类型

c函数返回数组类型 首先&#xff0c;C 不允许返回一个完整的数组作为函数的参数。但是&#xff0c;可以通过指定不带索引的数组名来返回一个指向数组的指针。C 不支持在函数外返回局部变量的地址&#xff0c;除非定义局部变量为 static 变量。 方法一&#xff1a;将返回值定义…

完整的Apache+PHP8+MYSQL的配置

1.下载Apache和PHP下载Apache&#xff0c;地址&#xff1a;http://www.apachelounge.com/download/&#xff0c;如下图&#xff1a;将下载的压缩包解压到某个文件夹(比如&#xff1a;D:\software), 将解压后的文件夹重命名为Apache24下载PHP压缩包&#xff0c;地址&#xff1a;…

天云数据入选中国信通院《全球数据库产业图谱(2022)》

6月28日&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;、中国通信标准化协会指导&#xff0c;中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;主办的2022大数据产业峰会在京召开。 大会现场&#xff0c;魏凯…

黑马Pink老师JavaScript新教程上线啦~

今天是你开工的第几天&#xff1f; 是谁在回味假期的美好 是谁一上班就困困困 是谁身在上班心还在春节假 友情提示 再坚持4天&#xff0c;就到周末了 世间长假难有 但周末常在 无论是对于学习人还是打工人来说 周末都太美好了 和周末一样美好的 还有黑马的免费教程 …

11-Alibaba微服务流控组件Sentinel实战上

分布式系统遇到的问题 在一个高度服务化的系统中,我们实现的一个业务逻辑通常会依赖多个服务,比如:商品详情展示服务会依赖商品服务, 价格服务, 商品评论服务. 如图所示: 调用三个依赖服务会共享商品详情服务的线程池. 如果其中的商品评论服务不可用, 就会出现线程池里所有线程…

快来看啊,2023成都Java培训机构排行榜出来啦!

来啦&#xff0c;来啦&#xff01;我带着2023成都最新Java培训机构排行榜来啦。不知道怎么选择一个好的Java培训机构&#xff1f;停止寻觅&#xff0c;别再犹豫&#xff0c;看我这一篇就够啦&#xff01;一、成都动力节点动力节点&#xff0c;09年成立&#xff0c;14年来只专注…

C++语法复习笔记-3. C语言陷阱与C++改进

文章目录1.C语言常见语法问题1. 字符问题2.c语言的考虑3.C的思考2.C语言指针和数组问题1.问题表现传入参数会退化为指针2.问题原因3.C解决方案处理二维数组3. c语言移位问题1.问题表现逻辑右移还是算术右移移位操作位数的限制2.问题原因3.C中的解决方案4. C语言强制类型转换问题…

idea如何设置通过鼠标去改变字体的大小,idea如何进行作者署名以及时间显示

目录 一、idea如何设置通过鼠标去改变字体的大小 步骤&#xff1a; 1、缩小字体 2、放大字体 二、idea如何进行作者署名以及时间显示 步骤: 一、idea如何设置通过鼠标去改变字体的大小 步骤&#xff1a; 1、缩小字体 设置settings——>键盘设置keymap——>缩小字…

使用 cat 查看创建的软链接文件,出现 cat: 文件: 符号连接的层数过多

今天在使用 cat 查看创建的软链接文件时&#xff0c;出现了这样一个问题&#xff1a; 出现过程&#xff1a; 1、首先&#xff0c;在当前 home 目录下我有一个 2.txt 文件和 test 文件夹 &#xff1b; [wqlocalhost ~]$ ls 1.txt 2.txt Desktop Documents Downloads Musi…

如何将网站全部变成灰色的素装效果,瞧过来

最近&#xff0c;我们看到各个网站、app的页面全部变成了灰色或者黑白色。对于我们需要悼念的日子&#xff0c;使用这种素装&#xff0c;以表示我们对逝者或者英雄的悼念与缅怀&#xff01; 我们看到这种全站的内容全部为灰色&#xff0c;是不是很好奇呢&#xff1f;图片、按钮…

【香橙派4B】1、重刷系统

目录 准备材料 准备软件 准备系统镜像文件 下载镜像 解压镜像包 烧录镜像到SD卡 格式化SD卡 烧录镜像 SD卡烧录镜像到香橙派4B 买回来的香橙派4B&#xff0c;刚上电是安卓的系统&#xff0c;无法进行开发&#xff0c;所以需要进行重装系统。 准备材料 闪迪官方的SD卡&…

图例legend语法及设置

(1)设置图例位置 使用loc参数 plt.legend(loc‘lower left’) 0‘best’1‘upper right’2‘upper left’3‘lower left’4‘lower right’5‘right’6‘center left’7‘center right’8‘lower center’9‘upper center’10‘center’ (2)设置图例字体 #设置字体大小 fontsi…

项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)

系列第二篇&#xff0c;话不多说&#xff0c;直接进入正题 事业部能源监控看板展示视频1、进度条组件 因为整个看板有四处地方用到&#xff0c;结合上一期提到的内容&#xff0c;我们优先考虑将这个模块做成组件 UED给的样式用echarts会很麻烦&#xff0c;我们优先考虑用eleme…

活体识别2: 综述类资源收集

说明 我自己不算专业的算法工程师&#xff0c;只是兼做一些算法的事。接触活体识别这个领域有些摸不清门路&#xff0c;所以网上有些综述类的文章和论文对我来说很重要&#xff0c;让我在对这个领域的知识脉络一无所知的时候有个大概的感性认识。 我这里罗列下我感觉不错的文…

互联网正在化有形为无形,这是一场深刻而又彻底的嬗变

如果放在几年前&#xff0c;你是万万无法想到互联网会蜕变成今天这样一副模样。尽管如此&#xff0c;这样一种蜕变却在真实地发生着。不知道你有没有发现就连前两年火爆的短视频人们都懒得刷了。所有的这一切都在告诉我们&#xff0c;互联网正在发生一场深刻而又彻底的嬗变。如…

【ML入门】anaconda环境搭建

【ML入门】anaconda环境搭建 一、安装anaconda anaconda简介 直接安装python不是更快吗&#xff0c;为什么使用anaconda&#xff1f; 可以理解anaconda是一个大容器&#xff08;类似docker&#xff09;&#xff0c;里面可以建立多个python虚拟环境&#xff0c;对于不同的工…

harbor不停机更换自定义证书

1、问题起源 今天在使用docker推镜像提示证书问题&#xff0c;查看是harbor的自签名证书过期了&#xff0c;报错如下 由于harbor是使用helm部署&#xff0c;以容器方式运行在k8s集群中&#xff0c;无法直接修改证书信息&#xff0c;需要通过更新secret更新证书 2、生成自签名…

论文投稿指南——中文核心期刊推荐(食品工业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

云计算|OpenStack|社区版OpenStack安装部署文档(二---OpenStack运行环境搭建)

前言&#xff1a; 一个良好的运行环境对于任何一个部署工作来说都是必须的&#xff0c;俗话说 万事开头难&#xff0c;其实很多部署工作失败的原因在于初始环境没有正确的配置&#xff0c;因此&#xff0c;按照官网的部署文档并结合自己的实际情况&#xff0c;配置一个合理的O…