乐趣区

关于python:几行代码实现Python捕获播放和保存摄像头视频

前几天在 Python 学习群外面看到了一个问题:

Python 怎么进步视频清晰度和对比度?

我之前没有波及到应用 Python 操作视频这一方面,所以过后很道歉地跟群里的敌人说暂未波及。

这两天想了下,感觉应该补一下这一块的内容,一方面是减少本人涉猎的广度,另一方面也能够给粉丝答疑解惑。

明天先分享一下 Python 操作视频最根本的操作,包含读取和播放视频和保留视频。

读取视频

要捕捉视频,你须要创立一个 VideoCapture 对象。它的参数能够是设施索引或视频文件的名称。所以,咱们读取视频有两种形式,别离是从相机中读取视频和从文件中读取视频。

从相机中读取视频

对于有摄像头的设施,例如带摄像头的笔记本电脑,咱们能够间接调起电脑的摄像头,读取摄像头的视频流。

import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:
    # 逐帧捕捉
    ret, frame = cap.read()
    # 如果正确读取帧,ret 为 True
    if not ret:
        break
    # 显示后果帧
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
# 实现所有操作后,开释捕捉器
cap.release()
cv.destroyAllWindows()

这里我向 VideoCapture 对象传入了参数 0,示意设施索引,设施索引就是指定哪个摄像头的数字。失常状况下,一个摄像头会被连贯 (就像我的状况一样)。所以我简略地传 0。你能够通过传递 1 来抉择第二个相机,以此类推。

cap.isOpened() 用来判断是否捕捉到视频。

cap.read() 返回布尔值 (True/ False)。如果正确读取了帧,它将为 True。因而,你能够通过查看此返回值来查看视频的结尾。

cv.imshow 办法用来显示视频的帧。咱们播放视频的原理就是逐帧播放。

在最初,不要遗记通过 cap.release() 开释俘虏。

运行这段代码,你就能够看到一个弹窗实时地播放你电脑摄像头中的图像了。

从文件中播放视频

与从相机捕捉雷同,只是用视频文件名更改摄像机索引。

另外,在显示视频时,能够通过 cv.waitKey() 来管制视频播放的速度。如果设置太小,则视频将十分快,相当于倍速播放;而如果太大,则视频将变得很慢,相当于提早播放。失常状况下 25 毫秒就能够了。

import cv2 as cv
cap = cv.VideoCapture('video.mp4')
while cap.isOpened():
    ret, frame = cap.read()
    # 如果正确读取帧,ret 为 True
    if not ret:
        break
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

运行这段代码,你就能够看到一个弹窗播放你抉择的视频文件了。

保留视频

从相机读取视频,咱们能够将视频保留到本地。咱们捕获一个视频,一帧一帧地解决,如果咱们想要保留这个视频,非常简单,只需应用 cv.VideoWriter()

cv.VideoWriter() 有 5 个参数:

  • 参数 1:输入文件名,例如: output.mp4。
  • 参数 2:FourCC 代码,FourCC 是用于指定视频编解码器的 4 字节代码。
  • 参数 3:帧率的数量。
  • 参数 4:帧大小。
  • 参数 5:色彩标记。如果为 True,失常色彩输入,否则就是灰色图像输入。

对于 FourCC 与视频格式的对照关系,我列举了一些常见的格局:

cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘1’) = MPEG-1 codec cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec –> mp4v cv2.VideoWriter_fourcc(‘M’,‘P’,‘4’,‘2’) = MPEG-4.2 codec cv2.VideoWriter_fourcc(‘D’,‘I’,‘V’,‘3’) = MPEG-4.3 codec cv2.VideoWriter_fourcc(‘D’,‘I’,‘V’,‘X’) = MPEG-4 codec –> avi cv2.VideoWriter_fourcc(‘U’,‘2’,‘6’,‘3’) = H263 codec cv2.VideoWriter_fourcc(‘I’,‘2’,‘6’,‘3’) = H263I codec cv2.VideoWriter_fourcc(‘F’,‘L’,‘V’,‘1’) = FLV1 codec

保留视频的代码:

import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创立 VideoWriter 对象
fourcc = cv.VideoWriter_fourcc(*'MJPG')
out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640,  480))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    frame = cv.flip(frame, 1)
    # 写翻转的框架
    out.write(frame)
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
# 实现工作后开释所有内容
cap.release()
out.release()
cv.destroyAllWindows()

运行这段代码,你就能够在代码目录下找到一个 output.mp4 的视频文件了。

下面几段代码中,如果想要退出视频操作,敲击键盘的 q 就能够。

总结

以上就是明天要介绍的内容了,应用 python-opencv 来操作视频还是比较简单的。当然,你也能够在读取或者保留视频时对视频进行一些解决,这个咱们后续再发文介绍。

以上就是本次分享的所有内容,想要理解更多 Python 常识欢送返回公众号:Python 编程学习圈 ,每日干货分享,发送“J”还可支付大量学习材料。

退出移动版