使用OpenCV和Python構建運動熱圖視訊
OpenCV是一個強大的影像和視訊處理庫,在這篇文章中,我將建立一個運動熱圖,用於檢測運動、一些物體或人的流動方向,以及在投影公共區域時對建築師的幫助。
簡介:
OpenCV,或(開源計算機視覺)是英特爾於1999年開發的一個庫,主要是計算機視覺和實時視訊操作,它是用C++編寫的,但受不同的語言(包括Python)支援。
工作流程:
這個程式是基於一種被稱為高斯背景減法的技術。這項技術被廣泛應用於用穩定的攝像機檢測運動物體。
背景減法建立一個表示幀(影像的靜態部分)背景的蒙版,對於每一幀,它將減去前一幀。
讓我們對該演算法如何工作的兩個主要步驟進行一個簡要概述:
- 背景初始化:在第一步中,通過凍結第一幀來計算背景的模型。
- 更新:在第二步中,下一幀將從上一幀中減去,因此,如果兩幀之間發生變化(移動),則這些幀的差異將反映出該變化,可以通過應用過濾器來進行市場銷售。
以下是背景遮罩應用於從城市攝像機錄製的短視訊的示例:
程式碼:
對於整個專案儲存庫,請在此處檢查。
- https://github.com/robertosannazzaro/motion-heatmap-opencv/blob/master/README.md
程式碼首先讀取輸入的視訊檔案並初始化所需的一些變數:
capture = cv2.VideoCapture('input.mp4')
background_subtractor = cv2.bgsegm.createBackgroundSubtractorMOG()
length = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
然後,for迴圈遍歷幀開始:
for i in range(0, length):
ret, frame = capture.read()
# If first frame
if first_iteration_indicator == 1:
first_frame = copy.deepcopy(frame)
height, width = frame.shape[:2]
accum_image = np.zeros((height, width), np.uint8)
第一個if塊檢查該幀是否為視訊的第一幀,這樣做是為了初始化背景減法的背景,然後accum_image使用與該幀的大小相對應的大小來初始化該陣列。
filter = background_subtractor.apply(frame) # remove the background
threshold = 2
maxValue = 2
ret, th1 = cv2.threshold(filter, threshold, maxValue, cv2.THRESH_BINARY)
accum_image = cv2.add(accum_image, th1)
color_image_video = cv2.applyColorMap(accum_image, cv2.COLORMAP_HOT)
為了消除例如風,小鳥飛行等少量運動,將閾值與maxValue一起應用到遮罩上。
然後將掩碼的結果新增到accum_image陣列中,對每個幀執行此操作。結果由用於儲存視訊中發生的每個運動的accum_image陣列組成,。
此外,在最後,因此,當已經對每個幀執行了先前描述的操作時,顏色對映被應用於遮罩並且遮罩與當前幀合併。
更進一步說,可以製作一個顯示熱圖逐幀衰減的視訊。為了實現這一點,將匯出每個幀,然後再次使用cv2,通過合併所有幀來生成視訊:
video = cv2.VideoWriter('output.avi', fourcc, 30.0, (width, height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
最後結果:
相關文章
- python使用pillow和opencv生成圖片縮圖PythonOpenCV
- OpenCV-Python 視訊讀取OpenCVPython
- python OpenCV VideoWriter 視訊格式及大小PythonOpenCVIDE
- [譯] 使用 SVG 和 Vue.Js 構建動態樹圖SVGVue.js
- python使用OpenCV設定圖片尺寸PythonOpenCV
- python使用opencv播放視訊併傳送到串列埠,讓51顯示PythonOpenCV串列埠
- 使用ChatGPT自動構建知識圖譜ChatGPT
- 功能性模組: (5)圖片生成視訊:ffmpeg版和OpenCV版OpenCV
- 【opencv五】利用opencv給讀入的視訊新增拖動滑塊OpenCV
- 手把手教你運用深度學習構建視訊人臉識別模型(Python實現)深度學習模型Python
- opencv python 從攝像頭獲取視訊/從檔案獲取視訊 /儲存視訊OpenCVPython
- 短視訊原始碼,python使用post提交圖片原始碼Python
- 使用開源元件構建自動運維Kafka叢集 - Slack元件運維Kafka
- 『OpenCV-Python』獲取圖片的基本引數資訊OpenCVPython
- opencv提取視訊每一幀OpenCV
- opencv視訊人臉檢測OpenCV
- opencv 視訊處理相關OpenCV
- CMake構建學習筆記13-opencv庫的構建筆記OpenCV
- 使用 Python 和 Pygame 模組構建一個遊戲框架PythonGAM遊戲框架
- 如何使用MySQL Workbench構建ER圖?MySql
- Python:圖片合視訊(最簡)Python
- 混合高斯模型實現運動目標檢測(OpenCV內建實現)模型OpenCV
- 使用Knative和Python的構建無伺服器事件驅動的應用 - Ron NagarPython伺服器事件
- 短視訊直播系統,js利用建構函式封裝輪播圖JS函式封裝
- python中使用OpenCV畫線PythonOpenCV
- Facebook視訊撬動25%互動量,解碼頂流視訊的熱點基因
- openCV檢測物體是否運動OpenCV
- Python+OpenCV目標跟蹤實現基本的運動檢測PythonOpenCV
- [譯] 使用Capacitor 和 Vue.js 構建移動應用Vue.js
- python opencv讀取網路圖片PythonOpenCV
- Python 資料結構視訊教程三Python資料結構
- Python構建企業微信自動訊息轉發服務端Python服務端
- 使用Java和Neo4j構建圖資料庫應用Java資料庫
- 短視訊軟體開發,ios啟動圖適配和啟動圖示適配iOS
- 使用JavaCV實現讀取視訊資訊及自動擷取封面圖Java
- Signal如何使用Rust構建大規模端到端加密視訊通話?Rust加密
- 使用 Redis 和 Python 構建一個共享單車的應用程式RedisPython
- 視訊人臉檢測——OpenCV版(三)OpenCV