【OpenCV】P3 OpenCV通过摄像头采集视频并保存(未完成)

OpenCV如何通过摄像头采集视频?本节内容将通过OpenCV实现通过电脑前置摄像头或外接摄像头采集视频的操作。

本节内容主要分为两个部分:
第一个部分为实现从摄像设备读取视频数据;
第二个部分为实现保存读取的数据到指定地址中。

从摄像设备读取数据

主要通过 cv2.VideoCapture(0)cap.read() 实现选择输入视频设备与读取视频帧。

代码

import cv2

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

# 获取视频设备
cap = cv2.VideoCapture(0)

while(True):
    # 从摄像头读取视频帧
    ret, frame = cap.read()

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

    # 判断输入是否为q键,是则退出
    key = cv2.waitKey(10)
    if key == ord("q"):
        break

# 释放videoCapture
cap.release()
cv2.destroyAllWindows()

代码讲述

首先引入cv2之后,第一部分为创建窗口:

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

代码可无,但是若想要规定视频展示窗口大小,则需要通过 resizeWindow() 函数执行大小。在本案例中指定窗口大小为 640*480。


第二部分内容为获取视频采集设备。

# 获取视频设备
cap = cv2.VideoCapture(0)

【OpenCV】P3 OpenCV通过摄像头采集视频并保存(未完成)_第1张图片

通过查看底层源代码,可以发现在 cv2.VideoCapture() 函数中只需要输入一个参数,设备代号即可。


第三部分内容为获取到采集到的视频信息

# 从摄像头读取视频帧
ret, frame = cap.read()

同样,通过查看底层代码,可以发现其返回两个参数:
ret 以及 frame

【OpenCV】P3 OpenCV通过摄像头采集视频并保存(未完成)_第2张图片

加断点,打印 retframe 查看其内容:

ret

【OpenCV】P3 OpenCV通过摄像头采集视频并保存(未完成)_第3张图片
第一个返回参数 ret,返回内容为布尔值,其说明视频采集成功,即是否有数据。

frame

【OpenCV】P3 OpenCV通过摄像头采集视频并保存(未完成)_第4张图片

frame返回的为视频实时信息,以数组的形式返回视频中每一个帧的HMC数据(我觉得应该是??评论可以留言),大小与我们设定的显示框大小吻合,即 640*480。


第四部分为将视频采集数据放到窗口上进行展示

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

数据来源为上一部分的 frame 数组数据。大小为6404803 (3代表为3Channels,三个通道信息)。


剩下部分为退出以及释放空间。

当然,还要另外提一句的是,在判断判断是否按q键退出的部分,还有一个可以调整的参数:

# 判断输入是否为q键,是则退出
key = cv2.waitKey(10)

waitKey函数为等待从键盘中输入一个值,这里的等待的时长为10ms,因为被外层while循环嵌套,所以其实在不断地循环。读者可以尝试时长设为1000ms会发生什么?0又会发生什么?


QA问题解答部分

Q1:为什么我的视频采集没有数据?
看看是不是没开摄像头。当下新笔记本电脑会设置物理防偷窥以及侧面按键关闭摄像头。

Q2:为什么我的采集到的视频“卡顿”?
尝试修改 waitKey 函数中的值,提示:越小越不卡顿,0和负值除外。。。


将读取到的视频数据保存

videowriter 将多个视频帧保存为视频文件;
write 方法:将原始的文件编码压缩之后,再写入到指定文件中去。
write 方法的参数包括:(输出路径,编码格式,帧率,分辨率)


代码


代码讲述

FourCC 用于定义编码格式,关于 FourCC 文档:
http://en.wikipedia.org/wiki/FourCC
常用编码格式列表如下:
编码格式 |
-------- | -----
电脑 | $1600
手机 | $12


QA


2022年11月1日

你可能感兴趣的:(#,【OpenCV】,opencv,音视频,计算机视觉)