本文介绍基于python语言使用OpenCV提供的接口在树莓派上实现视频的预览和视频的保存(avi),以及使用OpenCV读取播放一个现有的视频文件,并将这个视频文件写道另一个文件中。
本文主要参考http://www.waveshare.net/study/article-903-1.html
1.摄像头的视屏预览并保存到本地。
1.1首先是设置摄像头:
capCamera = cv2.VideoCapture(0)//打开摄像头
capCamera.set(cv2.CAP_PROP_FRAME_WIDTH, 480)//设置视屏的宽高
capCamera.set(cv2.CAP_PROP_FRAME_HEIGHT, 640)
1.2设置视屏的压缩格式,帧率,帧大小,以及视屏要保存的文件文件名
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
fps = 30
framesize=(int(capCamera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(capCamera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
outCamera = cv2.VideoWriter('outputCamera.avi', fourcc, fps, framesize)
1.3 while循环中一直判断camera是否处于打开状态
while(capCamera.isOpened()):
1.4返回值ret成功或者失败。frameCamera是读取到的帧数据
ret , frameCamera = capCamera.read()
1.5将读取到的帧数据frameCamera写入到文件中
outCamera.write(frameCamera)
1.6imshow在屏幕上显示帧数据
cv2.imshow('outputCamera', frameCamera)
1.7如果按下q键就退出while循环
if(cv2.waitKey(1) == ord('q')):
break
1.8 释放申请到的camera内容
capCamera.release()
1.9正常关闭所有的绘图窗口
cv2.destroyAllWindows()
2.使用OpenCV读取一个本地的avi格式的视频数据
2.1打开一个本地的视频文件
capVideo = cv2.VideoCapture('outputCamera.avi')
2.2获取这个文件的fourcc,也就是压缩格式
fourcc = int(capVideo.get(cv2.CAP_PROP_FOURCC))
print('fourcc=',fourcc)
2.3获取到这个视频的帧率
fps = capVideo.get(cv2.CAP_PROP_FPS)
print('fps=%d'%fps)
2.4获取到这个视频的高宽
frameSize=(int(capVideo.get(cv2.CAP_PROP_FRAME_WIDTH)),int(capVideo.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('frameSize=', frameSize)
创建需要写入的视频文件
outVideo = cv2.VideoWriter("outputVideo", fourcc, fps, frameSize)
2.5while循环中一直判断视频是否一直处于打开状态
while(capVideo.isOpened()):
2.6读取到视频帧数据frameVideo,以及成功与否的返回ret
ret, frameVideo = capVideo.read()
2.7读取成功就将数据帧写入到文件以及显示出帧画面,否则退出
if ret:
outVideo.write(frameVideo)
cv2.imshow('framvideo', frameVideo)
if cv2.waitKey(1) == ord('q'):
break
2.8释放写入文件的资源
capVideo.release()
cv2.destroyAllWindows()
完整的代码如下:
def camera_save_to_local():
#set for camera
capCamera = cv2.VideoCapture(0)
capCamera.set(cv2.CAP_PROP_FRAME_WIDTH, 480)
capCamera.set(cv2.CAP_PROP_FRAME_HEIGHT, 640)
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
print('fourcc %s' %fourcc)
fps = 30
print('fps:%d' %fps)
framesize = (int(capCamera.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capCamera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(framesize)
outCamera = cv2.VideoWriter('outputCamera.avi', fourcc, fps, framesize)
while(capCamera.isOpened()):
ret , frameCamera = capCamera.read()
outCamera.write(frameCamera)
cv2.imshow('outputCamera', frameCamera)
if(cv2.waitKey(1) == ord('q')):
break
capCamera.release()
cv2.destroyAllWindows()
def read_save_video():
capVideo = cv2.VideoCapture('outputCamera.avi')
fourcc = int(capVideo.get(cv2.CAP_PROP_FOURCC))
print('fourcc=',fourcc)
fps = capVideo.get(cv2.CAP_PROP_FPS)
print('fps=%d'%fps)
frameSize=(int(capVideo.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capVideo.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('frameSize=', frameSize)
outVideo = cv2.VideoWriter("outputVideo", fourcc, fps, frameSize)
while(capVideo.isOpened()):
ret, frameVideo = capVideo.read()
if ret:
outVideo.write(frameVideo)
cv2.imshow('framvideo', frameVideo)
if cv2.waitKey(1) == ord('q'):
break
capVideo.release()
cv2.destroyAllWindows()