本文介紹基於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()