• OpenCV实现视频的读取、显示、保存


    目录

    1,从文件中读取视频并播放

    1.2代码实现

    1.3效果展示

    2,保存视频

    2.1    代码实现

    2.2   结果展示


    下面将详细介绍如何使用OpenCV实现视频的读取、显示和保存,并解释其原理。

    1. 视频读取: 使用OpenCV可以通过cv2.VideoCapture类来读取视频文件。该类提供了一系列方法用于操作视频,如open打开视频文件,read读取视频帧等。首先需要创建一个VideoCapture对象,并指定视频文件的路径或设备索引号。然后通过read方法循环读取视频帧,直到读取完所有帧或发生错误。

      原理:VideoCapture类基于相应的视频输入接口(如摄像头、视频文件等)实现了视频读取的功能。它使用底层的视频设备驱动程序或解码器来获取视频帧数据,并将其提供给上层应用程序进行处理。

    2. 视频显示: 在读取到视频帧后,可以使用cv2.imshow方法将帧显示在窗口中。需要创建一个窗口对象,并指定窗口名称,然后通过imshow方法传入帧数据即可。为了保持视频播放的流畅性,还可以使用cv2.waitKey方法设置适当的延迟时间,以控制帧之间的显示间隔。

      原理:imshow方法使用系统级的图形库(如OpenGL、DirectX等)将帧数据绘制在显示器上,实现视频帧的显示功能。waitKey方法用于等待键盘输入,通过相应的延迟时间控制帧的显示速度。

    3. 视频保存: 在进行视频处理后,可以使用cv2.VideoWriter类将处理结果保存为视频文件。首先需要创建一个VideoWriter对象,并指定输出文件的名称、编码器、帧率和图像尺寸等参数。然后通过write方法将处理后的帧写入到输出文件中,最后调用release方法释放资源。

      原理:VideoWriter类利用系统级的视频编码库(如FFmpeg、OpenH264等)将帧数据编码并写入输出视频文件。它提供了对输出文件格式、编码器和参数的灵活配置,以满足不同需求的视频保存操作。

    通过以上步骤,我们可以利用OpenCV实现视频的读取、显示和保存。在实现过程中,OpenCV利用底层的视频设备驱动程序或解码器获取视频帧数据,并利用图形库和视频编码库实现帧的显示和保存。这些功能的实现使得OpenCV成为一个强大的视频处理工具,在计算机视觉、图像处理等领域得到广泛应用。

    1,从文件中读取视频并播放

    在OpenCV中我们需要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:

    (1)创建读取视频的对象

    cap = cv.VideoCapture(filepath)   参数:视频文件路径

    (2)视频的某些属性

    (3)判断图像是否读取成功

    (4)获取视频的一帧图像

    (5)调用cv.imshow显示图像,在显示图像时使用cv.waitkey()设置适当的持续时间,如果太低视频会播放的非常快,如果太高就会播放的非常慢,通常情况下设置为  25  ms

    (6) 调用cap.release()将视频释放掉

    1.2代码实现

    1. import numpy as np
    2. import cv2 as cv
    3. #获取视频对象
    4. cap = cv.VideoCapture(r'E:\All_in\opencv\video.mp4')
    5. #判断是否读取成功
    6. while(cap.isOpened()):
    7. #获取某一帧图像
    8. ret , frame = cap.read()
    9. #获取成功显示图像
    10. if ret == True:
    11. cv.imshow('frame',frame)
    12. #每一帧间隔25ms
    13. if cv.waitKey(25)& 0xFF == ord('q'):
    14. break
    15. #释放视频对象
    16. cap.release()
    17. cv.destroyWindow()

    1.3效果展示

    2,保存视频

    2.1    代码实现

    1. import cv2 as cv
    2. import numpy as np
    3. #读取视频
    4. cap = cv.VideoCapture(r'E:\All_in\opencv\video.mp4')
    5. #获取图像的属性(宽和高),并将其转化为整数
    6. frame_width = int(cap.get(3))
    7. frame_height = int(cap.get(4))
    8. #创建保存图像的对象 , 设置编码格式,帧率,图像的宽 高等
    9. '''函数第一个参数为输出文件路径,因为我们想保存为AVI格式,所以要指定编码格式为'M','J','P','G'(MJPEG压缩)
    10. ,帧率设置为10,视频帧的宽高设置为前面获取到的frame_width和frame_height。'''
    11. out = cv.VideoWriter('outpy.avi',cv.VideoWriter_fourcc('M','J','P','G'),10,(frame_width,frame_height))
    12. while(True):
    13. #获取视频中每一帧图像
    14. ret ,frame= cap.read()
    15. if ret==True:
    16. #将每一帧图像写入输出文件中
    17. out.write(frame)
    18. else:
    19. break
    20. #释放资源
    21. cap.release()
    22. out.release()
    23. cv.destroyAllWindows()

    2.2   结果展示

  • 相关阅读:
    妙手ERP功能更新丨Shopee全球产品支持使用定价模板修改价格、Ozon新增SKU模板 、Temu采集箱支持添加货源链接......
    中国雪深长时间序列数据集(1979-2020)
    【软件测试】采用等价类划分法设计测试用例
    Java BIO
    PyTorch 与 TensorFlow:机器学习框架之战
    java基础13
    2022-08-07 集合拓展---遍历
    区间调度问题及贪心算法证明
    LPL Ban/Pick 选人阶段的遮罩效果是如何实现的?
    Json Schame匹配map<string, map<string, int>>
  • 原文地址:https://blog.csdn.net/qq_53545309/article/details/133465326