计算机视觉 OpenCV (2)

作者: zidea | 来源:发表于2019-08-03 20:04 被阅读13次

    今天分享的是如何通过 OpenCV 读写视频流。

    读取视频流

    import cv2
    cap = cv2.VideoCapture(0)
    

    这里 VideoCapture 方法参数 0 表示读取默认摄像头的视频流,如果使用 0 没有成功可尝试给 -1,当设备有两个摄像头可以通过 1 来得到第二个摄像头的视频流。

    while(True):
        ret, frame = cap.read()
        cv2.imshow('frame',frame)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    

    cap 的 read 读取视频流方法会返回来两个参数, ret 表示是否成功获取视频流,而 frame 这是每一帧的画面,我们通过 imshow 方法将捕获画面显示出来,最后通过判断用户是否按下 q 键来执行退出操作。

    cap.release()
    cv2.destroyAllWindows()
    

    退出后我们还有一些重要的收尾工作就是需要释放掉 cap 对象。

    读取视频流完整代码

    import cv2
    # -1 1
    cap = cv2.VideoCapture(0)
    
    while(True):
        ret, frame = cap.read()
        cv2.imshow('frame',frame)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
    

    我们也可以在输出每一帧画面前,对画面进行处理,这里通过 cvtColor 读取 frame 视频流根据指定第二个参数 cv2.COLOR_BGR2GRAY 将视频流数据转换为灰度图片

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    

    将图片处理为灰度图,使用了 cvtColor 方法来实现。然后通过 cap 的 isOpened 方法来判断是否成功捕获到图片。

    while(cap.isOpened()):
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame',gray)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
    

    通过 cap 实例也可以获取一些读取视频流的设置,下面可以输出读取视频流的视频的尺寸,也就是掌管

        print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    
    1280.0
    720.0
    

    保存图像

    VideoWriter_fourcc 用来设置需要保存视频的格,查看可以一个一个字符输入,可以可以以 * 开始输入这个字符串。

    fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
    
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    

    使用 VideoWriter 读取视频流,第一个参数为要写入的文件,第二个参数为输出的视频的格式,

    cap = cv2.VideoCapture(0)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('output.avi',fourcc,20.0,(1280,720))
    
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret == True:
            
        # print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        # print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
            out.write(frame)
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            cv2.imshow('frame',gray)
    
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    cap.release()
    out.release()
    cv2.destroyAllWindows()
    

    相关文章

      网友评论

        本文标题:计算机视觉 OpenCV (2)

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