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)

其他与直接读取视频一致

完整实例

python 复制代码
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)

完整示例

python 复制代码
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()
相关推荐
奔跑吧 android6 小时前
【车载Audio】【AudioHal 08】【高通音频架构】【SA8295P 音频资源管理器 (ResourceManager) 决策逻辑深度解析 】
音视频·sa8295p·audiohal·高通音频架构·音频资源管理器
linux_cfan9 小时前
拒绝“黑屏”与“哑剧”:Web视频播放器UX体验与自动播放选型指南 (2026版)
前端·javascript·音视频·html5·ux
咚咚王者12 小时前
人工智能之视觉领域 计算机视觉 第十二章 视频目标跟踪
人工智能·计算机视觉·音视频
兮动人13 小时前
苹果cms采集资源后(已添加播放器)播放不了视频
音视频·cms·苹果cms·苹果cms v10
好奇心害死薛猫13 小时前
全网首发_api方式flashvsr批量视频高清增强修复教程
python·ai·音视频
yq1982043011561 天前
使用Django构建视频解析网站 从Naver视频下载器看Web开发全流程
前端·django·音视频
咚咚王者1 天前
人工智能之视觉领域 计算机视觉 第十章 图像直方图
人工智能·opencv·计算机视觉
linux_cfan1 天前
2026版 WordPress 视频插件终极选型:知识付费创作者如何低成本打造专业在线课堂?
前端·javascript·音视频·html5
REDcker2 天前
SIP 协议原理及应用精解
音视频·ims·sip·sdp·移动通信·volte·h323
奔跑吧 android2 天前
【车载Audio】【AudioHal 07】【高通音频架构】【从逻辑策略到物理执行】
音视频·audio·aosp·android15·8295·音频子系统