前几天在 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”还可支付大量学习材料。