美文网首页
OpenCV-Python学习(二):视频入门

OpenCV-Python学习(二):视频入门

作者: 星光下的胖子 | 来源:发表于2020-06-23 19:16 被阅读0次

    目标:

    • 1.读取视频
    • 2.显示视频
    • 3.保存视频

    读取、显示和保存视频

    示例:

    import cv2
    
    # 1.创建VideoCapture对象-->用于读取视频
    # 1)读取摄像头
    # cap = cv2.VideoCapture(0)
    # 2)视频流地址:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
    cap = cv2.VideoCapture("http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8")
    # 3)视频文件路径:D:/迅雷下载/诛仙.mkv
    # cap = cv2.VideoCapture("D:/迅雷下载/诛仙.mkv")
    
    if not cap.isOpened():  # 判断cap是否成功捕获
        print("Cannot open camera")
        exit()
    
    # 2.定义解码器并创造VideoWrite对象-->用于保存视频
    fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 定义解码器
    # 创建视频流写入对象VideoWriter,VideoWriter_fourcc为视频编解码器,30为帧播放速率
    # (1920, 1080)为视频帧大小,要与下面frame的大小一致(否则会导致保存的视频无法播放)
    out = cv2.VideoWriter('D:/迅雷下载/output.avi', fourcc, 30, (1920, 1080))
    
    while True:
        # 3.读取视频
        ret, frame = cap.read()  # ret表示是否成功获取帧,视频读到结尾,ret就为False。frame是每一帧的图像。
    
        if not ret:  # 如果未成功读取帧,就退出循环
            print("Can't receive frame (stream end?). Exiting ...")
            break
    
        # 4.显示视频图片
        cv2.namedWindow("frame", cv2.WINDOW_NORMAL)  # 创建一个窗口,可调整大小
        cv2.imshow("frame", frame)  # 展示视频图片
    
        # 5.保存视频图片
        # frame = cv2.flip(frame, 0)  # 沿x轴方向翻转图片并保存
        out.write(frame)  #保存视频图片
        print(frame.shape)  # (1080, 1920, 3)
    
        # 按'q'键退出循环
        if cv2.waitKey(41) & 0xFF == ord('q'):
            break
    
    cap.release()  # 释放VideoCapture对象
    out.release()  # 释放VideoWriter对象
    cv2.destroyAllWindows()  # 销毁所有窗口
    

    函数分析:

    • cv2.VideoCapture() 创建VideoCapture对象-->用于读取视频
      它的参数可以是设备索引或视频文件的名称。
      参数是0,表示打开笔记本的前置摄像头。
      参数是1,表示打开笔记本的后置摄像头。
      参数是视频文件路径则采集相应视频。

    • cap.isOpened() 检查cap是否已初始化

    • VideoWriter_fourcc(c1, c2, c3, c4) 定义解码器
      FourCC:http://en.wikipedia.org/wiki/FourCC 是用于指定视频编解码器的4字节代码。可用代码列表可在fourcc.org中:http://www.fourcc.org/codecs.php 找到。它取决于平台。遵循编解码器对我来说效果很好。

      • 在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。(最好使用XVID。MJPG会生成大尺寸的视频。X264会生成非常小的尺寸的视频)
      • 在Windows中:DIVX(尚待测试和添加)
      • 在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。

      FourCC代码作为MJPG的cv.VideoWriter_fourcc('M','J','P','G')or cv.VideoWriter_fourcc(*'MJPG')传递。

    • cv2.VideoWriter() 创建一个VideoWriter对象-->用于保存视频
      第一个参数表示保存的视频文件名
      第二个参数为视频解码器
      第三个参数为帧播放速度
      第四个参数为视频帧大小

    • ret, frame = cap.read() 按帧读取视频,一帧就是一张图片。
      ret是bool类型,表示是否成功获取帧。如果视频读到结尾,那么ret就为False。
      frame 是每一帧的图像,是一个三维矩阵numpy.ndarray。

    • cap.release() 释放VideoCapture对象

    • out.release() 释放VideoWriter对象

    相关文章

      网友评论

          本文标题:OpenCV-Python学习(二):视频入门

          本文链接:https://www.haomeiwen.com/subject/fsihfktx.html