網站首頁 編程語言 正文
需求背景
在很多時候我們需要抽取視頻的某一幀做一些分析或修改等;比如筆者需求就是判斷一個人在該視頻中出現的頻率,以判斷他是否是這段視頻的主角;
關于opencv
OpenCV 是 Intel 開源計算機視覺庫 (Computer Version) 。它由一系列 C 函數和少量 C++ 類構成,實現了圖像處理和計算機視覺方面的很多通用算法。
OpenCV 擁有包括 300 多個 C 函數的跨平臺的中、高層 API 。它不依賴于其它的外部庫 —— 盡管也可以使用某些外部庫。 OpenCV 對非商業應用和商業應用都是免費 的
。同時 OpenCV 提供了對硬件的訪問,可以直接訪問攝像頭,并且 opencv 還提供了一個簡單的 GUI(graphics user interface) 系統 :highgui 。 我們就通過 OpenCV 提供的一些方法來構造出這個人臉檢測 ( face detection ) 程序來。
安裝opencv
pip install opencv-python
用opencv按一定間隔截取視頻幀,并保存為圖片。
這個例子使用python編程:
代碼:
# -*- coding:utf8 -*- import cv2 import os import shutil def VideoExtract(filename, count=600): ''' :param filename: 視頻文件路徑 :param count: 保存圖片的幀率間隔 :return: ''' # 保存圖片的路徑 savedpath = filename.split('.')[0] + '/' isExists = os.path.exists(savedpath) if not isExists: os.makedirs(savedpath) print('path of %s is build' % (savedpath)) else: shutil.rmtree(savedpath) os.makedirs(savedpath) print('path of %s already exist and rebuild' % (savedpath)) # 開始讀視頻 videoCapture = cv2.VideoCapture(filename) i = 0 j = 0 while True: success, frame = videoCapture.read() i += 1 if (i % count == 0): # 保存圖片 j += 1 savedname = filename.split('.')[0] + '_' + str(j) + '_' + str(i) + '.jpg' cv2.imwrite(savedpath + savedname, frame) print('image of %s is saved' % (savedname)) if not success: break
運行完成后在生成的圖片文件夾中會寫入很多圖片,也就是我們剛剛每個count幀抽出的畫面
根據這個抽幀情況來看該視頻主角應該就是TRUMP
了;
抽幀之前當然要做一些視頻屬性的判斷,如視頻時長、視頻大小等
cap = cv2.VideoCapture(video_name) # 幀率 fps = int(round(cap.get(cv2.CAP_PROP_FPS))) # 分辨率-寬度 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 分辨率-高度 height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 總幀數 frame_counter = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) cap.release() cv2.destroyAllWindows() # 時長,單位s duration = frame_counter / fps
opencv-python獲取視頻相關信息
以下是opencv-python可以獲取視頻的相關信息,可以通過從0開始的序號獲取
CV_CAP_PROP_POS_MSEC
視頻文件的當前位置(以毫秒為單位)或視頻捕獲時間戳。
CV_CAP_PROP_POS_FRAMES
接下來要解碼/捕獲的幀的基于0的索引。
CV_CAP_PROP_POS_AVI_RATIO
視頻文件的相對位置:0 - 電影的開始,1 - 電影的結尾。
CV_CAP_PROP_FRAME_WIDTH
視頻流中幀的寬度。
CV_CAP_PROP_FRAME_HEIGHT
視頻流中幀的高度。
CV_CAP_PROP_FPS
幀速率。
CV_CAP_PROP_FOURCC
編解碼器的4字符代碼。
CV_CAP_PROP_FRAME_COUNT
視頻文件中的幀數。
CV_CAP_PROP_FORMAT
返回的Mat對象的格式 retrieve() 。
CV_CAP_PROP_MODE
指示當前捕獲模式的特定于后端的值。
CV_CAP_PROP_BRIGHTNESS
圖像的亮度(僅適用于相機)。
CV_CAP_PROP_CONTRAST
圖像對比度(僅適用于相機)。
CV_CAP_PROP_SATURATION
圖像的飽和度(僅適用于相機)。
CV_CAP_PROP_HUE
圖像的色調(僅適用于相機)。
CV_CAP_PROP_GAIN
圖像的增益(僅適用于相機)。
CV_CAP_PROP_EXPOSURE
曝光(僅適用于相機)。
CV_CAP_PROP_CONVERT_RGB
布爾標志,指示是否應將圖像轉換為RGB。
CV_CAP_PROP_WHITE_BALANCE_U
白平衡設置的U值(注意:目前僅支持DC1394 v 2.x后端)
CV_CAP_PROP_WHITE_BALANCE_V
白平衡設置的V值(注意:目前僅支持DC1394 v 2.x后端)
CV_CAP_PROP_RECTIFICATION
立體攝像機的整流標志(注意:目前僅支持DC1394 v 2.x后端)
CV_CAP_PROP_ISO_SPEED
攝像機 的ISO速度(注意:目前僅支持DC1394 v 2.x后端)
CV_CAP_PROP_BUFFERSIZE
存儲在內部緩沖存儲器中的幀數(注意:目前僅支持DC1394 v 2.x后端)
原文鏈接:https://blog.csdn.net/qq_37275405/article/details/103219821
相關推薦
- 2022-09-06 golang實現命令行程序的使用幫助功能_Golang
- 2022-10-28 關于react中的常見錯誤及解決_React
- 2022-10-07 C語言直接插入排序算法介紹及示例_C 語言
- 2023-05-20 Kotlin作用域函數使用示例詳細介紹_Android
- 2022-07-18 SpringBoot之定時任務三種實現方法
- 2022-05-17 ubuntu E: 無法獲得鎖 /var/lib/dpkg/lock-frontend - open
- 2022-06-22 git版本庫介紹及本地創建的三種場景方式_其它綜合
- 2022-05-13 c++中文字符匹配,但不匹配中文標點的完美解決方案。
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支