有以下程序
import cv2
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret,frame = cap.read()
cv2.imshow('frame',frame)
c = cv2.waitKey(1)
if c == 27:
break
cap.release()
cv2.destroyAllWindows()
說明:
程序段里,
1、cv2.VideoCapture()函數:
cap = cv2.VideoCapture(0)
VideoCapture()中參數是0,表示打開筆記本的內置攝像頭。
cap = cv2.VideoCapture("…/1.avi")
VideoCapture("…/1.avi"),表示參數是視頻文件路徑則打開視頻。
2、cap.isOpened()函數:
返回true表示成功,false表示不成功
3、ret,frame = cap.read()函數:
cap.read()按幀讀取視頻,ret,frame是獲cap.read()方法的兩個返回值。其中ret是布爾值,如果讀取幀是正確的則返回True,如果文件讀取到結尾,它的返回值就為False。frame就是每一幀的圖像,是個三維矩陣。
4、cv2.waitKey()函數:
參數是1,表示延時1ms切換到下一幀圖像,參數過大如cv2.waitKey(1000),會因為延時過久而卡頓感覺到卡頓。
參數為0,如cv2.waitKey(0)只顯示當前幀圖像,相當于視頻暫停。
注意:如果這里沒有waitKey()函數,則只會顯示空白窗口,看不到攝像頭視頻。個人分析是因為waitKey()讓窗口保持了一定時間,否則前一幀還沒有顯示出來就開始顯示下一幀,就會造成窗口一直是空白(如果是服務端程序無需gui窗口觀看視頻,則代碼中無此函數要求):
沒有waitKey()函數時的空白窗口
5、cap.release()與destroyAllWindows()函數:
cap.release()釋放視頻,調用destroyAllWindows()關閉所有圖像窗口。
6、c = cv2.waitKey(1)
c得到的是鍵盤輸入的ASCII碼,esc鍵對應的ASCII碼是27,即當按esc鍵是if條件句成立。