计算机视觉OpenCV学习笔记(二):视频文件的读取、显示、保存,以及从摄像头获取并显示视频
(5)视频
本篇目标:
- 学会读取视频文件,显示视频,保存视频文件。
- 学会从摄像头获取并显示视频
- 将用到cv2.VideoCapture(),cv2.VideoWrite()
5.1 使用摄像头捕获视频
opencv提供了一个非常简单的接口,让我们可以使用摄像头捕获一段视频,并转化成灰度视频显示出来,要想捕获视频首先我们需要先创建一个VideoVCapture对象,参数是设备的索引号,也可以是一个视频文件。0一般表示电脑的默认摄像头,当然也可以给出1、2…来选择其它的摄像头,在最后千万不要忘记停止捕获视频。
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret,frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) == ord('q'):
print(frame)
break;
pass
cap.release()
cv2.destroyWindow()
注:ret得到的是个布尔值,也就是说视频帧读取的正确就返回true,反之即为false。frame得到的是视频画面信息。
有时候摄像机不能初始化成功,我们可以通过cap.isOpened() 方法来判断摄像机是否初始化成功,如果初始化成功结果返回True,反之为False。倘若为False,我们可以使用cap.Open() 来手动初始化设备相机。
另外,我们还阔以通过cap.get(propld)、cap.set(propld,value),来获取视频的一些参数和改变相应的值,propld可取0到18之间的任何整数,每个数代表了视频的一个属性。
import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened() == False:
cap.open()
else:
print('摄像机初始化成功')
pass
while(cap.isOpened()):
ret,frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #将摄像头获取到的画面转化成灰度图
cv2.imshow('frame',gray)
# print(cap.set(3,5),cap.set(4,5))
if cv2.waitKey(1) == ord('q'):
# print(frame)
break;
pass
cap.release()
cv2.destroyWindow()
5.2 从文件中播放视频
这个非常的简单,我们只需要在cv2.VideoCapture()中传入视频文件的路径即可
cap = cv2.VideoCapture(r'/Users/ar/Desktop/video.mp4')
5.3 保存视频
对于我们捕获的视频,对每一帧进行处理后,希望将这个视频保存,对于图片来说,我们只需要调用cv2.imwrite()就好了,而对于视频,我们就需要一些其它的处理,包括视频的编码格式,视频帧率等。
我们先要创建一个VIdeoWrite的对象,这个对象有要输出视频的名字,FourCC编码,帧率等。然后在我们需要保存的时候直接调用这个对象的write()方法即可。
FourCC就是一个4字节码,是用来确定视频的编码格式的,可用的编码列表可以从http://fourcc.org查到。
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(r'/Users/ar/Desktop/video_save.mp4', fourcc, 20.0, (640,480)) #保存视频的对象
while (cap.isOpened()):
ret, frame = cap.read()
if ret == True:
frame = cv2.flip(frame,0) #图像翻转,0是垂直翻转,1是水平翻转,-1是水平加垂直翻转
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) == ord('q'):
break
pass
else:
break
pass
pass
cap.release()
out.release()
cv2.destroyWindow()