摘要:這次開始學習從攝像頭獲取視頻使用獲取視頻要獲取視頻,需要創建一個對象,參數可以是設備索引攝像頭索引或視頻文件的名稱。
這次開始學習Getting Started with Videos
1從攝像頭獲取視頻使用cv2.VideoCapture()獲取視頻.
cv2.VideoCapture(builtins.object)
要獲取視頻,需要創建一個VideoCapture對象,參數可以是設備索引(攝像頭索引)或視頻文件的名稱。如果是設備索引,當只連接一臺攝像機時,可以是0或-1;也可以通過傳遞1來選擇第二個攝像頭。
我們設cap = cv2.VideoCapture(0)
cap.open()
打開cap
cap.isOpened()
檢測cap是否初始化成功,如果返回True,則初始化成都,否則使用cap.open()打開cap
cap.read()
返回兩個值
首先返回一個bool值,如果能正確讀取幀,則為True,否則為False.可以通過檢查該返回值來檢查視頻的結尾.
再返回一個值,為每一幀的圖像,該值是一個三維矩陣
Note :如果使用一個變量接受兩個值,frame = cap.read() 則 frame 為一個元組,原來使用 frame 處需更改為 frame[1]
cap.get(propld)
通過cap.get(propld)訪問視頻的某些功能,propld是0到18之間的數字。每個數字表示視頻的屬性。
比如:
cap.get(cv2.CAP_PROP_FRAME_WIDTH)和cap.get(cv2.CAP_PROP_FRAME_HEIGHT)得到幀寬和高度.
如果想修改為320x240.只需使用
ret = cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)和
ret = cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240).
參數 | propld | 功能 |
---|---|---|
cv2.CAP_PROP_POS_MSEC | 0 | 視頻文件的當前位置(以毫秒為單位)或視頻捕獲時間戳 |
cv2.CAP_PROP_POS_FRAMES | 1 | 基于0的索引將被解碼/捕獲下一幀 |
cv2.CAP_PROP_POS_AVI_RATIO | 2 | 視頻文件的相對位置:0 - 視頻的開始,1 - 視頻的結束 |
cv2.CAP_PROP_FRAME_WIDTH | 3 | 幀的寬度 |
cv2.CAP_PROP_FRAME_HEIGHT | 4 | 幀的高度 |
cv2.CAP_PROP_FPS | 5 | 幀速 |
cv2.CAP_PROP_FOURCC | 6 | 4個字符表示的視頻編碼器格式 |
cv2.CAP_PROP_FRAME_COUNT | 7 | 幀數 |
cv2.CAP_PROP_FORMAT | 8 | byretrieve()返回的Mat對象的格式 |
cv2.CAP_PROP_MODE | 9 | 指示當前捕獲模式的后端特定值 |
cv2.CAP_PROP_BRIGHTNESS | 10 | 圖像的亮度(僅適用于相機) |
cv2.CAP_PROP_CONTRAST | 11 | 圖像對比度(僅適用于相機) |
cv2.CAP_PROP_SATURATION | 12 | 圖像的飽和度(僅適用于相機) |
cv2.CAP_PROP_HUE | 13 | 圖像的色相(僅適用于相機) |
cv2.CAP_PROP_GAIN | 14 | 圖像的增益(僅適用于相機) |
cv2.CAP_PROP_EXPOSURE | 15 | 曝光(僅適用于相機) |
cv2.CAP_PROP_CONVERT_RGB | 16 | 表示圖像是否應轉換為RGB的布爾標志 |
cv2.CAP_PROP_WHITE_BALANCE | 17 | |
cv2.CAP_PROP_RECTIFICATION | 18 | 立體攝像機的整流標志 |
從攝像頭獲取視頻,并將其轉換為灰度視頻并顯示它.
代碼 :
import numpy as np import cv2 cap = cv2.VideoCapture(0) while(True): # Capture frame-by-frame ret, frame = cap.read() # Our operations on the frame come here gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Display the resulting frame cv2.imshow("frame",gray) if cv2.waitKey(1) & 0xFF == ord("q"):#若檢測到按鍵 ‘q’,退出 break # When everything done, release the capture cap.release()#釋放攝像頭 cv2.destroyAllWindows()#刪除全部窗口
Note :最后不要忘記release capture
1從文件獲取視頻使用cv2.VideoCapture()獲取視頻.
cv2.VideoCapture(builtins.object)
與從攝像頭獲取視頻相同,只是參數為視頻文件的名稱.
應用代碼 :
import numpy as np import cv2 cap = cv2.VideoCapture("vtest.avi") while(cap.isOpened()): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow("frame",gray) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows()
Note :
應為cv2.waitKey選擇恰當的時間,如果設置太小,視頻播放將非常快,如果設置太大,視頻將顯示慢動作,一般設置25毫秒.
在使用Video Capture時應確保安裝了正確版本的ffmpeg 或gstreamer.
3保存視頻使用cv2.VideoWriter()保存視頻.
cv2.VideoWriter()
首先創建一個VideoWriter對象并指定輸出文件名(例如:output.avi)。然后指定FourCC代碼。然后應該傳遞每秒幀數(fps)和幀大小。最后一個是isColor標志。如果是True,則編碼器需要彩色幀,否則它適用于灰度幀。
FourCC
用于指定視頻編解碼器的4字節代碼,可以在fourcc.org中找到可用代碼列表。它取決于平臺.
?在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2.(XVID更為可取.MJPG會產生高大小的視頻.X264可以提供非常小的視頻)
?在Windows中:DIVX(更多要測試和添加)
?在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)
FourCC代碼通過cv2.VideoWriter_fourcc()傳遞
比如:
對于MJPG,FourCC代碼作為cv2.VideoWriter_fourcc("M","J","P","G")或cv2.VideoWriter_fourcc(*"MJPG")傳遞.
從攝像頭獲取視頻,在垂直方向上翻轉每一幀并保存它.
代碼 :
import numpy as np import cv2 cap = cv2.VideoCapture(0) # Define the codec and create VideoWriter object fourcc = cv2.VideoWriter_fourcc(*"XVID") out = cv2.VideoWriter("output.avi",fourcc, 20.0, (640,480)) while(cap.isOpened()): ret, frame = cap.read() if ret==True: frame = cv2.flip(frame,0) # write the flipped frame out.write(frame) cv2.imshow("frame",frame) if cv2.waitKey(1) & 0xFF == ord("q"): break else: break # Release everything if job is finished cap.release() out.release() cv2.destroyAllWindows()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41970.html
怎么從0到1學習Python呢?Python中的知識點,涉及到內容主要是Python Opencv,用于人工智能,機器學習模擬相關的數據,那么,里面的一些較為基礎的知識點,涉及到的內容是什么呢?下面就給大家詳細解答下。 OpenCV是一個流行的開源計算機視覺庫,可用于不同的編程語言,例如Python、C++和JavaScript。它提供了一套豐富的工具來處理和分析圖像和視頻,讓你可以從調整單...
閱讀 1784·2023-04-25 14:33
閱讀 3385·2021-11-22 15:22
閱讀 2182·2021-09-30 09:48
閱讀 2691·2021-09-14 18:01
閱讀 1746·2019-08-30 15:55
閱讀 3009·2019-08-30 15:53
閱讀 2145·2019-08-30 15:44
閱讀 653·2019-08-30 10:58