0 引言
上一節講到了如何呼叫電腦內置攝像頭,那如果我們想捕獲攝像頭拍到的影像應該怎樣操作呢?本文將提出一種解決方法(完整代碼附于文末):
1 先將上一節的代碼復制一遍
本節程式主要在上一節的代碼中進行增添修改
import numpy as np
import cv2 as cv
cap=cv.VideoCapture(0)
if not cap.isOpened():
print('Cannot open camera')
exit()
while True:
ret,frame=cap.read()
if not ret:
print('Cannot receive frame . Exiting...')
break
gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
new_gray=cv.flip(gray, 1)
cv.imshow("frame",new_gray)
if cv.waitKey(1)& 0xFF==ord('q'):
break
cap.release()
cv.destroyAllWindows()
2 在已經捕獲到的影像中,設定保存操作
實作這個功能,我們要用到一個函式:cv.VideoWriter(),其功能主要是創建一個物件,來寫入視頻,該函式由video+writer組成,意為視頻+寫入,即保存視頻;例:
vw=cv.VideoWriter("C:/Users/output.avi",cv.VideoWriter_fourcc('X','V','I','D'),20.0,(640,480) )
該函式中分為四個引數,分別表示:儲存路徑及檔案名稱、保存視頻的格式、每一幀播放速率、視頻視窗畫幅,
3 設定視頻保存格式
視頻格式大家熟知的有:.avi、.mp4等等,他們分別對應的fourcc編碼為:MJPG、DIVX,在設定時,將對應的fourcc編碼輸入到cv.VideoWriter_fourcc()中,即可,例:
cv.VideoWriter_fourcc('X','V','I','D') //設定保存格式為.avi
4 將視頻寫入保存物件
確定好以上引數后,我們通過攝像頭讀取到視頻資訊后,可以逐幀寫入前面定義的保存物件:cv.VideoWriter(),也就是cw,需要使用物件下的函式:vw.write(),例:
videowrite.write(frame)
5 釋放所有的捕獲物件
cap.release()
videowrite.release()
cv.destroyAllWindows()
6 補充:視頻內容翻轉函式
該函式cv.flip(),可以讓相機捕獲到的視頻沿X、Y、XY軸對稱翻轉,
frame=cv.flip(frame,1)
主要引數有兩個,第一個是翻轉的視窗物件,文中是frame;第二個引數為翻轉坐標軸的確定:
引數>0時,影像視頻沿Y軸對稱翻轉、
引數=0時,影像視頻沿XY兩軸各對稱翻轉一次、
引數<0時,影像視頻沿X軸對稱翻轉,
7 附上保存視頻完整程式
import numpy as np
import cv2 as cv
cap=cv.VideoCapture(0)
fourcc=cv.VideoWriter_fourcc(*'XVID')
videowrite=cv.VideoWriter('C:/Users/liao/Desktop/output.avi',fourcc,20.0,(640,480))
while cap.isOpened():
ret,frame=cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting..." )
break
frame=cv.flip(frame,1)
videowrite.write(frame) #將一幀寫入
cv.imshow('frame',frame)
if cv.waitKey(1)==ord('q'):
break
cap.release()
videowrite.release()
cv.destroyAllWindows()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291270.html
標籤:其他
上一篇:Python——OpenCV庫的學習(七):影像平滑
下一篇:QT中使用openCV
