1. 程式人生 > >Opencv-Python視訊處理

Opencv-Python視訊處理

一、視訊的讀取

OpenCV為視訊的讀入提供了一個類VideoCapture,用於獲取相機裝置並捕獲影象和視訊,或是從檔案中捕獲。

  • 從相機裝置讀取:cv2.VideoCapture(Index)——Index預設為0,可以根據相機數目增加,cap.read()返回布林值,最後記得釋放捕獲
import numpy as np
import cv2

cap = cv2.VideoCapture(0)
ret = cap.set(3,320)####設定捕獲視窗大小
ret = cap.set(4,240)

while(cap.isOpened()):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)####彩色影象用BGR2RGB

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
  • 從視訊檔案捕捉:VideoCapture(filename):
import numpy as np
import cv2

cap = cv2.VideoCapture('vtest.avi')

while(cap.isOpened()):
    ret, frame = cap.read()##ret返回布林量

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

二、視訊儲存

主要使用函式:cv2.VideoWriter(filename,  fourcc, fps,  frameSize)

引數詳解

  • filename:指定的檔名
  • fourcc:編碼格式,如CV_FOURCC(‘P’,’I’,’M’,’1’)是MPEG-1格式,CV_FOURCC(‘M’,’G’,’P’,’G’)為motion-jpeg格式
  • fps:幀率
  • frameSize:視訊的尺寸大小,(320,240)、(640,480)
#!/usr/bin/env python
 
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
i = 0
while( i < 18):
    i = i+1
    print(cap.get(i))
 
ret = cap.set(3,320)
ret = cap.set(4,240)
 
#output info
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (320,240))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
        out.write(frame)
 
        cv2.imshow('image', gray)
        k = cv2.waitKey(1)
        if (k & 0xff == ord('q')):
            break
    else:
        break
 
cap.release()
out.release()
cv2.destroyAllWindows()