一、 使用攝像頭捕獲視頻并顯示
import cv2
cap = cv2.VideoCapture(0)
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- opencv自帶的VideoCapture()函數(shù)定義攝像頭對象,其參數(shù)0表示第一個攝像頭,有多個攝像頭的情況下參數(shù)換1、2、3……試試
- 在while循環(huán)中,利用攝像頭對象的read()函數(shù)讀取視頻的某幀,并顯示,然后等待1個單位時間,如果期間檢測到了鍵盤輸入q,則退出,即關閉窗口。
- 調用release()釋放攝像頭,調用destroyAllWindows()關閉所有圖像窗口。
二、視頻保存
視頻保存可以用cv2.VideoWriter這個函數(shù),需要參數(shù)有視頻名, 格式, 碼率(fps), 幀的尺寸等參數(shù)
可以這么調用:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), \
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('camera_test.avi', fourcc, fps, size)
...
# 寫入一幀
out.write(frame)
網(wǎng)上有人說fourcc參數(shù)填-1,我試了,發(fā)現(xiàn)并沒有用
fps那個參數(shù)之在讀取視頻再保存的時候用,保存攝像頭拍攝到的視頻就要填要保存視頻的幀數(shù)
三、完整代碼
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('camera_test.avi', fourcc,10.0, size)
while True:
ret, frame = cap.read()
# 橫向翻轉
frame = cv2.flip(frame, 1)
out.write(frame)
# 在圖像上顯示 Press Q to save and quit
cv2.putText(frame,
"Press Q to save and quit",
(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 255, 0), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
參考:
https://blog.csdn.net/huanglu_thu13/article/details/52337013
https://blog.csdn.net/qq_38003892/article/details/79304139
https://blog.csdn.net/fanzy1234/article/details/78582204