Opencv 视频的读取与写入

这篇具有很好参考价值的文章主要介绍了Opencv 视频的读取与写入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言 

通过路径获取视频内容 

获取视频内容

检查是否正确打开

 循环播放

完整代码

从摄像头读取视频数据

获取视频设备

其他与直接读取视频一致

完整实例

录制视频 

用于创建视频编解码器的四字符码(FourCC)

cv2.VideoWriter()

将视频帧逐帧写入视频文件

完整示例


前言 

- 视频是由图片组成的, 视频的每一帧就是一幅图片, 一般是30帧, 表示一秒显示30张图片.
 - cv2.VideoCapture可以捕获摄像头, 用数字来表示不同的设备, 比如0, 1
 - 如果是视频文件, 可以直接指定路径即可.

通过路径获取视频内容 

获取视频内容

vc = cv2.VideoCapture(path)

检查是否正确打开

vc.isOpened()  # 可以读到内容返回True

 循环播放

播放视频就是不停的换图像帧,即循环调用  vc.read()    和   cv2.imshow()

完整代码

import cv2
# 打开视频文件
def open_video(path):
    vc = cv2.VideoCapture(path)
    ret = vc.isOpened()  # 可以读到内容返回True
    # 检查是否正确打开
    if ret:
        print("视频打开成功")
    else:
        print("视频打开失败")
        return -1
    print(f"开始播放视频:  {path.split('/').pop()},按esc键退出")
    # 循环读帧播放视频
    while ret:
        # 可以读到内容ret返回True
        ret, frame = vc.read()
        # 读到最后frame就是空
        if frame is None:
            print("视频播放完毕")
            break
        if ret:
            cv2.imshow('{}'.format(path).split('/').pop(), frame)
            # 0xFF == 27表示按esc退出键会退出
            if cv2.waitKey(33) & 0xFF == 27:
                break
    # 释放视频对象
    vc.release()
    # 关闭窗口
    cv2.destroyAllWindows()

open_video("videos/1.mp4")

从摄像头读取视频数据

获取视频设备

cap = cv2.VideoCapture(0)

其他与直接读取视频一致

完整实例

import cv2

# 从摄像头一直读取数据
def camera():
    # 获取视频设备
    cap = cv2.VideoCapture(0)
    print("获取视频设备成功")
    ret = cap.isOpened()

    # 创建窗口
    cv2.namedWindow('video', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('video', 640, 480)
    print("成功创建窗口")

    print("开始播放来自摄像头的视频,按esc键退出)
    while ret:
        # 从摄像头读取视频
        ret, frame = cap.read()

        # 将视频帧放在窗口中显示
        cv2.imshow('video', frame)

        # 等待键盘事件, 按esc键会退出
        if cv2.waitKey(33) & 0xFF == 27:
            break

    # 释放摄像头
    cap.release()
    print("摄像头已关闭")
    # 关闭窗口
    cv2.destroyAllWindows()
camera()

录制视频 

- VideoWriter : 参数一为输出文件, 参数二为多媒体文件格式(VideoWriter_fourcc),
参数三为帧率, 参数四为分辨率.
- write 编码并写入缓存
- release 缓存内容写入磁盘, 并释放资源

用于创建视频编解码器的四字符码(FourCC)

fourcc = cv2.VideoWriter_fourcc(*'mp4v')  

cv2.VideoWriter()

vm = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))

'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。

将视频帧逐帧写入视频文件

vw.write(frame)文章来源地址https://www.toymoban.com/news/detail-660880.html

完整示例

import cv2

# 录制视频
def record_video():
    # 获取视频设备
    cap = cv2.VideoCapture(1)
    print("获取视频设备成功")
    # *mp4v就是解包操作 等同于  'm', 'p', '4', 'v'
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 用于创建视频编解码器的四字符码(FourCC)。
    # (640, 480)表示摄像头拍视频, 这个大小搞错了也不行,主要是这个分辨率.
    vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))
    # 'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。

    print("开始录制来自摄像头的视频,按esc键退出")
    # 循环存帧录制视频
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            print('没有接收到图像')
            break

        vw.write(frame)  # 将视频帧逐帧写入视频文件。
        cv2.imshow('frame', frame)  # 显示录制的帧

        if cv2.waitKey(33) & 0xFF == 27:
            break

    # 释放摄像头
    cap.release()
    print("摄像头已关闭")

record_video()

到了这里,关于Opencv 视频的读取与写入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调视频TS码流并解析预览图像

    《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 两年前博主写了如何利用JavaCV解析各种h264裸流,《JavaCV音视频开发宝典:使用javacv读取GB28181、海康大华平台和网络摄像头sdk回调视频码流并解析预览图像》,但是随着时间变化,各个厂商s

    2024年02月14日
    浏览(46)
  • JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调录像回放视频PS码流并解析预览图像

    《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 上一章中《JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调视频TS流并解析预览图像》已经详细介绍了针对海康SDK实时视频流回调的TS流解析实现,并且也提到了PS流和

    2024年02月16日
    浏览(53)
  • Opencv 图像的读取与写入

    目录 导入cv2 读取图像数据 创建一个窗口 waitKey方法 关闭所有窗口 完整示例 保存图片 示例  

    2024年02月11日
    浏览(51)
  • JavaCV音视频开发宝典:使用javacv读取GB28181、海康大华平台和网络摄像头sdk回调视频码流并转码推流rtmp流媒体服务

    《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 本篇文章用于解决javacv接入h264/hevc裸流或者接入ps/ts流等字节流的非流媒体协议视频源接入并推流到rtmp流媒体服务。 本篇文章适用于gb28181/海康大华网络摄像机设备sdk对接以及海康大华等视频平

    2023年04月09日
    浏览(57)
  • 15.【opencv写入录制视频】

    本次课程讲:如果将我们通过电脑摄像头录取的视频进行代码保存到我们的文件中去,以及判断我们加载的图像是否被成功录入. (1)、VideoWriter 类:可以将多个视频帧保存为文件. 1.1参数一为:输出文件(路径); 1.2参数二为:多媒体文件格式(int型); JPMG(.mp4)、XVID(.val) 1.

    2023年04月10日
    浏览(28)
  • opencv从视频文件读取视频内容,从摄像头读取保存视频内容

    (1)argparse模块使编写用户友好的命令行接口变得容易。 (2)程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数。 (3)argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误信息。 import argparse # 导入库 parser = argparse.Argume

    2024年02月22日
    浏览(55)
  • 音视频学习-音视频基础

    ` ◼ 像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英语单词“元素element”,就得到了“pixel”,简称px,所以“像素”有“图像元素”之意。 ◼ 分辨率:是指图像的大小或尺寸。比如1920x1080。 ◼ 位深:是指在记录数字图像的颜色时,计算机实际上是用

    2024年02月12日
    浏览(111)
  • 【音视频】ffplay解析-音视频同步

    主要解析:以音频为基准,让视频同步音频 思路 视频慢了则丢掉部分视频帧(视觉-画⾯跳帧) 视频快了则继续渲染上⼀帧 具体实现 ffplay具体源码

    2024年02月07日
    浏览(49)
  • 音视频学习—音视频理论基础(2)

      音频是一种模拟信号,它是由声波转化而来的电信号。声波是通过气体、液体或固体传播的机械波,代表了声音的震动。在录制过程中,声音被转换成电信号,然后被储存在数字格式中。   声音的三要素是频率、振幅和波形   频率是指声波的振动次数,通常使用赫

    2024年04月29日
    浏览(41)
  • ffmpeg@音视频工具@音视频合并

    FFmpeg中文网 (github.net.cn) FFmpeg 是一款强大的开源跨平台音视频处理工具集,它包含了一系列命令行工具以及用于音频和视频编码解码、格式转换、抓取、流化等功能的库。FFmpeg 支持多种视频、音频格式和编解码器,能够进行音视频的压缩、封装、转码、分割、合并、过滤、抓

    2024年03月17日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包