基於python的opencv的錄像保存視頻預覽的操作

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章