Opencv?視頻讀取與寫入的實現(xiàn)示例
前言
視頻是由圖片組成的, 視頻的每一幀就是一幅圖片, 一般是30幀, 表示一秒顯示30張圖片.
- cv2.VideoCapture可以捕獲攝像頭, 用數(shù)字來表示不同的設(shè)備, 比如0, 1
- 如果是視頻文件, 可以直接指定路徑即可.
通過路徑獲取視頻內(nèi)容
獲取視頻內(nèi)容
vc = cv2.VideoCapture(path)
檢查是否正確打開
vc.isOpened() # 可以讀到內(nèi)容返回True
循環(huán)播放
播放視頻就是不停的換圖像幀,即循環(huán)調(diào)用 vc.read() 和 cv2.imshow()
完整代碼
import cv2 # 打開視頻文件 def open_video(path): vc = cv2.VideoCapture(path) ret = vc.isOpened() # 可以讀到內(nèi)容返回True # 檢查是否正確打開 if ret: print("視頻打開成功") else: print("視頻打開失敗") return -1 print(f"開始播放視頻: {path.split('/').pop()},按esc鍵退出") # 循環(huán)讀幀播放視頻 while ret: # 可以讀到內(nèi)容ret返回True ret, frame = vc.read() # 讀到最后frame就是空 if frame is None: print("視頻播放完畢") break if ret: cv2.imshow('{}'.format(path).split('/').pop(), frame) # 0xFF == 27表示按esc退出鍵會退出 if cv2.waitKey(33) & 0xFF == 27: break # 釋放視頻對象 vc.release() # 關(guān)閉窗口 cv2.destroyAllWindows() open_video("videos/1.mp4")
從攝像頭讀取視頻數(shù)據(jù)
獲取視頻設(shè)備
cap = cv2.VideoCapture(0)
其他與直接讀取視頻一致
完整實例
import cv2 # 從攝像頭一直讀取數(shù)據(jù) def camera(): # 獲取視頻設(shè)備 cap = cv2.VideoCapture(0) print("獲取視頻設(shè)備成功") ret = cap.isOpened() # 創(chuàng)建窗口 cv2.namedWindow('video', cv2.WINDOW_NORMAL) cv2.resizeWindow('video', 640, 480) print("成功創(chuàng)建窗口") print("開始播放來自攝像頭的視頻,按esc鍵退出) while ret: # 從攝像頭讀取視頻 ret, frame = cap.read() # 將視頻幀放在窗口中顯示 cv2.imshow('video', frame) # 等待鍵盤事件, 按esc鍵會退出 if cv2.waitKey(33) & 0xFF == 27: break # 釋放攝像頭 cap.release() print("攝像頭已關(guān)閉") # 關(guān)閉窗口 cv2.destroyAllWindows() camera()
錄制視頻
VideoWriter : 參數(shù)一為輸出文件, 參數(shù)二為多媒體文件格式(VideoWriter_fourcc),參數(shù)三為幀率, 參數(shù)四為分辨率.
- write 編碼并寫入緩存
- release 緩存內(nèi)容寫入磁盤, 并釋放資源
用于創(chuàng)建視頻編解碼器的四字符碼(FourCC)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
cv2.VideoWriter()
vm = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))
'output.mp4' 是輸出視頻文件的名稱,fourcc 是所選的視頻編碼器,20 是幀率,(640, 480) 是視頻的分辨率。
將視頻幀逐幀寫入視頻文件
vw.write(frame)
完整示例
import cv2 # 錄制視頻 def record_video(): # 獲取視頻設(shè)備 cap = cv2.VideoCapture(1) print("獲取視頻設(shè)備成功") # *mp4v就是解包操作 等同于 'm', 'p', '4', 'v' fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 用于創(chuàng)建視頻編解碼器的四字符碼(FourCC)。 # (640, 480)表示攝像頭拍視頻, 這個大小搞錯了也不行,主要是這個分辨率. vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480)) # 'output.mp4' 是輸出視頻文件的名稱,fourcc 是所選的視頻編碼器,20 是幀率,(640, 480) 是視頻的分辨率。 print("開始錄制來自攝像頭的視頻,按esc鍵退出") # 循環(huán)存幀錄制視頻 while cap.isOpened(): ret, frame = cap.read() if not ret: print('沒有接收到圖像') break vw.write(frame) # 將視頻幀逐幀寫入視頻文件。 cv2.imshow('frame', frame) # 顯示錄制的幀 if cv2.waitKey(33) & 0xFF == 27: break # 釋放攝像頭 cap.release() print("攝像頭已關(guān)閉") record_video()
到此這篇關(guān)于Opencv 視頻讀取與寫入的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Opencv 視頻讀寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法
這篇文章主要介紹了VS2019配置OpenCV時找不到Microsoft.Cpp.x64.user的解決方法,需要的朋友可以參考下2020-02-02C++函數(shù)指針與指針函數(shù)有哪些關(guān)系和區(qū)別
函數(shù)指針是一個指針變量,它可以存儲函數(shù)的地址,然后使用函數(shù)指針,這篇文章主要介紹了C++中函數(shù)指針與指針函數(shù)有哪些關(guān)系和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值2022-08-08C語言 structural body結(jié)構(gòu)體詳解用法
C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲不同類型的數(shù)據(jù)項,結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書館中書本的動態(tài),您可能需要跟蹤每本書的下列屬性2021-10-10