python+opencv實現視頻抽幀示例代碼
1、數據集簡述:
雖然有主流龐大的COCO、VOC數據集,但是科研人員仍需要特殊領域要求的數據集,所以采用人工實地采集的方式進行收集數據集圖像;通過拍照收集圖像過於繁瑣,所以通常是將攝像頭無規則的移動旋轉以及遠近拉縮,進而錄制視頻;再通過視頻抽幀的方式得到大量的圖像,再將這些圖像進行人工標註處理。
博主通過一個水下錄制視頻為例子,當這類圖像在網上鮮有存在時,要求有關技術人員進行實拍采集,下圖即為采集得到的視頻。
為瞭避免不符合項目要求的數據增強,博主要求技術人員在錄制視頻時最大程度地讓攝像頭進行移動、旋轉以及遠近調節等;這樣抽幀後的圖像更具有泛化性。
2、代碼介紹:
下面是采用以幀數為間隔的方法進行視頻抽幀,博主個人認為這樣子的方式調節間隔更加方便,更符合個人習慣。
import cv2 from PIL import Image import numpy as np cap = cv2.VideoCapture("D:/Download/ANMR0005.mp4") # 獲取視頻對象 isOpened = cap.isOpened # 判斷是否打開 # 視頻信息獲取 fps = cap.get(cv2.CAP_PROP_FPS) imageNum = 0 sum=0 timef=15 #隔15幀保存一張圖片 while (isOpened): sum+=1 (frameState, frame) = cap.read() # 記錄每幀及獲取狀態 if frameState == True and (sum % timef==0): # 格式轉變,BGRtoRGB frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 轉變成Image frame = Image.fromarray(np.uint8(frame)) frame = np.array(frame) # RGBtoBGR滿足opencv顯示格式 frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) imageNum = imageNum + 1 fileName = 'D:/Download/video_image/image' + str(imageNum) + '.jpg' # 存儲路徑 cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY, 100]) print(fileName + " successfully write in") # 輸出存儲狀態 elif frameState == False: break print('finish!') cap.release()
3、代碼效果:
pycharm運行py文件後結果框顯示的內容:
視頻抽幀得到的圖像保存至指定的文件夾:
抽幀得到的圖片示例:
4、相關說明: ①本代碼依據錄制視頻、對opencv的理解以及大佬的項目代碼靈感進行編寫;
大佬的項目代碼地址
②本數據集屬於私人閉源,不公開。
到此這篇關於python+opencv實現視頻抽幀的文章就介紹到這瞭,更多相關python opencv視頻抽幀內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python通過opencv調用攝像頭操作實例分析
- python-opencv實現視頻指定幀數間隔圖像的保存功能
- 如何使用Python的OpenCV庫處理圖像和視頻
- Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區別
- 詳解Python+OpenCV進行基礎的圖像操作