OpenCV学习笔记(四)——对视频的读取操作

目录

读取视频内容

将彩色视频转换为灰色视频


读取视频内容

读取视频文件通常分为读取文件、验证是否打开成功打开文件、逐帧读取视频文件、释放资源和关闭窗口

(1)读取文件

在OpenCV中,通常使用VedioCapture来读取视频流,VedioCapture是OpenCV中的一个类,提供了一中便捷的方法读取视频内容。例如:

python 复制代码
vc=cv2.VideoCapture(r'test.mp4')

上述代码是在与程序所在的文件夹中读取名为test的mp4文件。

(2)验证是否成功打开文件

在获取视频之后需要处理视频流,例如下面的代码是处理视频流的部分:

python 复制代码
if vc.isOpened():
    is_open,frame=vc.read()
else:
    is_open=false
    print("无法打开视频文件")

isOpened()是一个函数调用,检查视频流是否已经打开。如果打开的话,OpenCV将会读取一帧图像并且将其保存在frame,如果保存成功,那么is_Open的值为true;如果保存不成功,那么is_Open的值为false。

(3)逐帧打开视频文件

python 复制代码
while True:
    ret, frame = video.read()

    if ret:
        cv2.imshow('Video', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
            break
    else:
        break

该循环是从视频流中读取一帧图像,并将结果存储在 frame 变量中。ret 是一个布尔值,表示是否成功读取到图像。然后判断是否成功读取到图像,如果是(ret==true),则继续执行下面的操作,即将每一帧展示出来,当视频播放玩的时候或者按q键中途退出。

(4)释放资源和关闭窗口

最后完成读取所有的帧之后,需要释放资源和关闭窗口,OpenCV使用release()释放资源,用cv2.destroyAllWindows()关闭窗口,代码如下:

python 复制代码
video.release()
cv2.destroyAllWindows()

完整的代码如下所示:

python 复制代码
vc=cv2.VideoCapture(r'D:\Photo\1.mp4')

#判断是否打开视频文件
if vc.isOpened():
    is_open,frame=vc.read()
else:
    is_open=false
    print("无法打开视频文件")

# 循环读取视频帧
while True:
    ret, frame = video.read()

    if ret:
        cv2.imshow('Video', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
            break
    else:
        break
#释放资源和关闭窗口
video.release()
cv2.destroyAllWindows()

现在尝试运行这段程序,在D盘中Photo文件夹中有一个名为1的mp4文件:

视频内容如下所示(使用动图来对mp4的内容进行展示,视频内容为显示引用,如若侵权可删):

运行结果如以下视频所示(使用动图的效果来展示):

将彩色视频转换为灰色视频

在OpenCV中同样也可以将彩色视频转换灰色视频:

python 复制代码
import cv2
vc=cv2.VideoCapture(r'D:\Photo\1.mp4')

#判断是否打开视频文件
if vc.isOpened():
    is_open,frame=vc.read()
else:
    is_open=false
    print("无法打开视频文件")

# 循环读取视频帧
while True:
    ret, frame = vc.read()

    if ret:
        
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('Video', gray_frame)
        if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
            break
    else:
        break
#释放资源和关闭窗口
vc.release()
cv2.destroyAllWindows()

只需要在imshow()函数前面加上cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)即可。运行效果如下所示:

相关推荐
Charles Ray14 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码15 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦1 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1231 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
waterHBO1 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
贾saisai3 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫3 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
烟雨666_java3 小时前
JDBC笔记
笔记
GEEKVIP3 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑