[英]How to capture video and save from webcam on click or pressing any key from keyboard using OpenCV
[英]OpenCV Video capture using keyboard to start/stop
我有一個運行腳本,能夠使用 2 個不同的鍵啟動/停止視頻 stream;
ESC
時,程序退出。SPACE
時,視頻 stream 被捕獲。但是,當捕獲視頻時,它會從腳本執行開始存儲所有 stream。
import cv2
import numpy as np
capture = cv2.VideoCapture(1)
codec = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter('CAPTURE.avi', codec, 30, (640, 480))
while True:
ret, frame_temp = capture.read()
cv2.imshow('FRAME', frame_temp)
key=cv2.waitKey(1)
if key%256 == 27:
break
elif key%256 == 32:
output.write(frame_temp)
capture.release()
output.release()
cv2.destroyAllWindows()
所以,當程序運行時,我想要;
SPACE
時開始錄制 stream,再次按下SPACE
時停止錄制。任何建議將不勝感激。
您需要一個額外的變量來確定您是否正在錄制。 我創建了一個名為recording_flag
的變量
import cv2
import numpy as np
capture = cv2.VideoCapture(1)
codec = cv2.VideoWriter_fourcc(*'XVID')
recording_flag = False
while True:
ret, frame_temp = capture.read()
cv2.imshow('FRAME', frame_temp)
key=cv2.waitKey(1)
if key%256 == 27:
break
elif key%256 == 32:
if recording_flag == False:
# we are transitioning from not recording to recording
output = cv2.VideoWriter('CAPTURE.avi', codec, 30, (640, 480))
recording_flag = True
else:
# transitioning from recording to not recording
recording_flag = False
if recording_flag:
output.write(frame_temp)
capture.release()
output.release()
cv2.destroyAllWindows()
此行while True:
並不完全適合您要執行的操作。 我建議您定義一個 function 來進行錄音,並在用戶通過空格鍵停止錄音時讓它遞歸調用自身。 腳本的頂部仍然會以相同的方式開始:
import cv2
import numpy as np
capture = cv2.VideoCapture(1)
codec = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter('CAPTURE.avi', codec, 30, (640, 480))
接下來你將定義你的 function,它從(永遠)等待一個鍵被按下開始。 一旦按下一個鍵,如果它是 escape (27),它會退出 function 並清理,如果它是 space (32),它會設置一個開始記錄的 boolean 標志(while 循環)。 如果既沒有按下轉義鍵也沒有按下空格鍵,它會調用自己並重新開始這個過程。 在 while 循環內,它檢查是否按下了一個鍵,如果是,它檢查它是轉義 (27) 還是空格 (32)。 如果它命中它,它要么退出 function(轉義),要么通過調用自身來停止記錄,從而重新開始整個過程(空格)。
def wait_then_capture():
key = cv2.waitKey(0)
if key%256 == 27:
return
elif key%256 == 32:
record = True
else:
wait_then_capture()
while record == True:
ret, frame_temp = capture.read()
cv2.imshow('FRAME', frame_temp)
key = cv2.waitKey(1)
if key%256 == 27:
return
elif key%256 == 32:
break
output.write(frame)
wait_then_capture()
然后我們調用我們的新 function 並以您已經擁有的相同清理結束腳本
wait_then_capture()
capture.release()
output.release()
cv2.destroyAllWindows()
你完成的腳本看起來像這樣
import cv2
import numpy as np
capture = cv2.VideoCapture(1)
codec = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter('CAPTURE.avi', codec, 30, (640, 480))
def wait_then_capture():
key = cv2.waitKey(0)
if key%256 == 27:
return
elif key%256 == 32:
record = True
else:
wait_then_capture()
while record == True:
ret, frame_temp = capture.read()
cv2.imshow('FRAME', frame_temp)
key = cv2.waitKey(1)
if key%256 == 27:
return
elif key%256 == 32:
break
output.write(frame)
wait_then_capture()
wait_then_capture()
capture.release()
output.release()
cv2.destroyAllWindows()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.