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


    目录

    读取视频内容

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


    读取视频内容

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

    (1)读取文件

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

    vc=cv2.VideoCapture(r'test.mp4')

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

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

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

    1. if vc.isOpened():
    2. is_open,frame=vc.read()
    3. else:
    4. is_open=false
    5. print("无法打开视频文件")

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

    (3)逐帧打开视频文件

    1. while True:
    2. ret, frame = video.read()
    3. if ret:
    4. cv2.imshow('Video', frame)
    5. if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
    6. break
    7. else:
    8. break

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

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

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

    1. video.release()
    2. cv2.destroyAllWindows()

    完整的代码如下所示:

    1. vc=cv2.VideoCapture(r'D:\Photo\1.mp4')
    2. #判断是否打开视频文件
    3. if vc.isOpened():
    4. is_open,frame=vc.read()
    5. else:
    6. is_open=false
    7. print("无法打开视频文件")
    8. # 循环读取视频帧
    9. while True:
    10. ret, frame = video.read()
    11. if ret:
    12. cv2.imshow('Video', frame)
    13. if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
    14. break
    15. else:
    16. break
    17. #释放资源和关闭窗口
    18. video.release()
    19. cv2.destroyAllWindows()

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

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

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

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

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

    1. import cv2
    2. vc=cv2.VideoCapture(r'D:\Photo\1.mp4')
    3. #判断是否打开视频文件
    4. if vc.isOpened():
    5. is_open,frame=vc.read()
    6. else:
    7. is_open=false
    8. print("无法打开视频文件")
    9. # 循环读取视频帧
    10. while True:
    11. ret, frame = vc.read()
    12. if ret:
    13. gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    14. cv2.imshow('Video', gray_frame)
    15. if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
    16. break
    17. else:
    18. break
    19. #释放资源和关闭窗口
    20. vc.release()
    21. cv2.destroyAllWindows()

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

  • 相关阅读:
    【STM32】江科大STM32学习笔记汇总(50)
    蓝旭后端第七次培训课 JDBC
    .Net Core 3.0 对 MongoDB 的多条件(两种)查询操作
    Docker学习(3)—— 将容器转化为新的镜像,并将新镜像发布到阿里云公共仓库或私有仓库
    华为认证 | 11月底这门HCIP认证即将发布!
    Mysql数据库之常用SQL语句及事务学习总结
    virtualbox配置ubuntu1804虚拟机相关流程
    C# 通过图像上3个坐标点计算夹角角度值,并且在图像放大、缩小时角度值保持不变
    人血清白蛋白修饰生物素HSA-Biotin;仅供科研实验用
    Android:关于定时任务重启之后的问题研究
  • 原文地址:https://blog.csdn.net/qq_54186956/article/details/136566245