深度学习-推荐系统-CV-NLP深度学习程序员

计算机视觉 OpenCV (2)

2019-08-03  本文已影响13人  zidea

今天分享的是如何通过 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()
上一篇下一篇

猜你喜欢

热点阅读