视频流基本处理操作

本文详细介绍了如何使用Python的OpenCV库从摄像头获取视频流,设置视频参数,如帧宽、帧高,并实现实时捕获图像并保存为图片。还展示了如何设置视频编码和帧率,以及释放资源的过程。
摘要由CSDN通过智能技术生成
"""
    视频基本处理:
        1.从摄像机获取视频
        2.创建一个基于摄像头的视频读取流,给定基于第一个视频设备
        3.设置摄像头相关参数
        4.打印属性
        5.便利获取视频中的图像(读取当前时刻的摄像头捕获的图像,返回值:True/False, Image/None)
"""
# 从摄像机获取视频
# 创建一个基于摄像头的视频读取流,给定基于第一个视频设备
capture = cv2.VideoCapture(0)

# 设置摄像头相关参数宽度和高度
success = capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1000)
if success:
    print('设置获取视频窗口的宽度已成功!')
success = capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 520)
if success:
    print('设置摄像头窗口的高度已成功!')

# 打印属性
size = (
    int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),
    int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
)
print(size)
print(capture.get(cv2.CAP_PROP_FPS))       # 30.0

# 创建一个视频输出对象,设置视频中的帧率,每秒存储多少幅图像
fps = 20   # 每秒存储20张

# 构造了一个视频写入对象 cv2.VideoWriter_fourcc('I', '4', '2', '0') 这个函数调用是用于指定视频文件的编码格式。
# 在这里,'I', '4', '2', '0' 代表一个特定的编码类型,即I420编码,也被称为YUV420格式。这是一种常用的视频编码格式,其中Y代表亮度分量,U和V代表色度分量,采样方式为4:2:0
video_writer = cv2.VideoWriter('V1wsy.avi', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)

# 构造10秒输出图像
num_frame = 10 * fps - 1

# 读取初始化摄像头窗口参数、图像帧
success, frame = capture.read()

# 遍历获取视频中的图像(读取当前时刻的摄像头捕获的图像,返回值:True/False, Image/None)
while success and num_frame > 0:
    video_writer.write(frame)
    success, frame = capture.read()
    num_frame -= 1
# cv2.waitKey(1) == -1 ;   cv2.waitKey(1)代表一帧一帧读取图像; 键盘不做关闭操作(-1)
# while success and cv2.waitKey(1) == -1:
#     cv2.imshow('frame', frame)
#     # 读取下一个摄像头窗口及捕获的帧图像
#     success, frame = capture.read()

# 释放资源
capture.release()
cv2.destroyAllWindows()

"""
    1.读取已有的视频资源
    2.设置摄像头捕获视频的窗口参数(高度、宽度)并打印属性
    3.设置截取视频变图像,将要保存的路径
    4.设置每秒存储多少张
    5.遍历视频流并一帧一帧获取图片并保存在之前创建的路径文件下
    6.循环结束,释放资源
"""
import os
import cv2

#  3.设置截取视频变图像,将要保存的路径
p = './video'
if not os.path.exists(p):
    os.makedirs(p)

# 创建视频流对象
capture = cv2.VideoCapture('V1wsy.avi')

# 设置摄像头捕获视频的窗口参数(高度、宽度)
success = capture.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
if success:
    print('设置获取视频窗口的宽度已成功!')
success = capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
if success:
    print('设置获取视频窗口的高度已成功!')

# 并打印属性,元组形式表达
size = (
    int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),
    int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
)
print(size)

# # 设置每秒存储多少张
# fps = 20

# 获取当前时刻摄像头捕获的图像,并返回值:T、F
success, frame = capture.read()
k = 0
# 遍历视频流并一帧一帧获取图片并保存在之前创建的路径文件下
while success and cv2.waitKey(60) == -1:
    if k % 10 == 0:
        cv2.imwrite('./video/img_{}.png'.format(k), frame)
    k += 1
    # 读取视频流下一帧
    success, frame = capture.read()

# 释放资源
capture.release()
cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值