PiscCode使用OpenCV和Python實現運動檢測與可視化

光流分析是計算機視覺中的重要技術,用于檢測視頻序列中物體的運動模式。本文將介紹如何使用OpenCV和Python實現一個實時的光流分析系統,該系統能夠檢測運動、生成熱力圖并提供詳細的統計分析。

技術概述

本系統基于Farneback稠密光流算法,能夠:

  1. 實時計算視頻幀之間的運動向量

  2. 生成運動熱力圖可視化

  3. 提供多種統計分析(均值、中位數、眾數等)

  4. 顯示歷史數據趨勢圖表

核心代碼解析

初始化設置

class DenseOpticalFlow:def __init__(self):self.init_parameters()self.prev_time = Noneself.fps = 30# 歷史統計數據self.max_history_length = 100self.displacement_history = deque(maxlen=self.max_history_length)self.mean_history = deque(maxlen=self.max_history_length)self.median_history = deque(maxlen=self.max_history_length)self.mode_history = deque(maxlen=self.max_history_length)self.speed_history = deque(maxlen=self.max_history_length)

使用deque數據結構來存儲歷史數據,自動維護固定長度的歷史記錄。

光流計算

def do(self, frame, device="cpu"):current_time = cv2.getTickCount() / cv2.getTickFrequency()gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 計算光流flow = cv2.calcOpticalFlowFarneback(self.prev_gray, gray_frame, None,self.flow_params["pyr_scale"], self.flow_params["levels"],self.flow_params["winsize"], self.flow_params["iterations"],self.flow_params["poly_n"], self.flow_params["poly_sigma"],self.flow_params["flags"])

使用OpenCV的calcOpticalFlowFarneback函數計算稠密光流,該算法能夠為每個像素點生成運動向量。

數據處理與可視化

# 計算運動幅值
magnitude, _ = cv2.cartToPolar(flow[...,0], flow[...,1])# 排除0值,只分析實際運動區域
nonzero_magnitude = magnitude[magnitude > 0]# 生成熱力圖
magnitude_norm = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX)
heatmap = cv2.applyColorMap(np.uint8(magnitude_norm), cv2.COLORMAP_INFERNO)
通過極坐標轉換獲取運動幅值,并使用INFERNO色彩映射生成熱力圖,紅色表示高強度運動,藍色表示低強度運動。

統計分析

# 計算統計量
if len(nonzero_magnitude) > 0:mean_val = float(np.mean(nonzero_magnitude))median_val = float(np.median(nonzero_magnitude))mode_val = float(stats.mode(nonzero_magnitude, keepdims=True)[0][0])
else:mean_val = median_val = mode_val = 0.0# 更新歷史數據
self.mean_history.append(mean_val)
self.median_history.append(median_val)
self.mode_history.append(mode_val)

系統計算三種主要統計量:

  • 均值:運動幅值的平均值

  • 中位數:運動幅值的中位數,對異常值不敏感

  • 眾數:最常見的運動幅值

可視化界面

def add_statistics_chart(self, side_by_side, magnitude):# 創建matplotlib圖表fig = plt.figure(figsize=(width/100, chart_height/100), dpi=100)gs = fig.add_gridspec(1,2, width_ratios=[1,1], wspace=0.3)# 左圖:當前幀位移分布直方圖ax1 = fig.add_subplot(gs[0])if len(magnitude) > 0:ax1.hist(magnitude.flatten(), bins=30, color="green", alpha=0.7)# 右圖:歷史統計趨勢線ax2 = fig.add_subplot(gs[1])x_vals = np.arange(len(self.mean_history))if len(x_vals) > 0:ax2.plot(x_vals, list(self.mean_history), label="Mean", color="blue")ax2.plot(x_vals, list(self.median_history), label="Median", color="orange")ax2.plot(x_vals, list(self.mode_history), label="Mode", color="green")

可視化界面分為兩部分:

  1. 左側直方圖:顯示當前幀的運動幅值分布

  2. 右側折線圖:顯示最近100幀的統計趨勢

應用場景

1. 運動檢測與監控

  • 檢測監控視頻中的異常運動

  • 統計人流量和運動模式

  • 識別運動方向和強度

2. 體育分析

  • 分析運動員的運動軌跡

  • 計算運動速度和加速度

  • 評估運動表現

3. 交通監控

  • 檢測車輛運動

  • 分析交通流量

  • 識別交通違規行為

4. 科學研究

  • 動物行為研究

  • 流體動力學分析

  • 微觀粒子運動跟蹤

結論

本文介紹的光流分析系統提供了一個完整的運動檢測解決方案,結合了實時處理、統計分析和可視化功能。通過OpenCV和Python的強大組合,開發者可以輕松實現各種運動相關的計算機視覺應用。

該系統具有良好的可擴展性,可以根據具體需求添加更多功能,如物體跟蹤、行為識別和高級統計分析。無論是學術研究還是工業應用,這都是一個強大的基礎框架。

對 PiscTrace or PiscCode感興趣?更多精彩內容請移步官網看看~🔗?PiscTrace

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920161.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920161.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day 36 復習日

浙大疏錦行 今天是復習日,神經網絡與機器學習最大的不同就是不止固定的三行代碼,需要自己定義一個模型,先繼承類的屬性,然后去寫自己的屬性,以及前向傳播方法,可以手動構建:中間層的數量、每一…

ES6/ES2015 - ES16/ES2025

ES6/ES2015 - ES16/ES2025 ECMAScript(簡稱ES)是JavaScript的官方標準,從2015年開始每年發布一個新版本。 版本一覽表年份版本主要新特性2015ES6/ES2015let/const、箭頭函數、Class、模板字符串、解構賦值、模塊、Promise2016ES7/ES2016指數運…

BIM 地鐵站可視化:智慧運維 “透視鏡”

圖撲 BIM 地鐵站可視化系統,以三維建模完整復刻車站空間,從出入口、站廳到設備層,管線走向、設施分布精準呈現。實時匯聚客流數據、空調等設備運行狀態,動態標記設備告警、空間占用情況。通過透明化模型,運維人員可直觀…

淘寶商品詳情頁數據接口設計與實現:從合規采集到高效解析

在電商數據分析、比價系統開發等場景中,商品詳情頁數據是核心基礎。本文將圍繞淘寶商品詳情頁數據接口的合規設計、高效采集與智能解析展開,提供一套可落地的技術方案,重點解決動態渲染、參數加密與數據結構化等關鍵問題。 一、接口設計原則…

HTML應用指南:利用GET請求獲取中國銀行人民幣存款利率數據

人民幣存款利率是影響居民儲蓄行為和企業資金配置的關鍵因素,也是宏觀經濟調控的重要工具。中國銀行根據中國人民銀行的指導政策,結合市場情況與自身經營策略,定期調整并公布人民幣存款利率標準。這些利率信息主要涵蓋活期存款、定期存款&…

RPS和QPS

簡介 這是系統設計中兩個最核心且容易混淆的性能指標。簡單來說: ? RPS 是 “每秒請求數”,是從客戶端或負載均衡器的視角看,服務器每秒接收到的請求數量。 ? QPS 是 “每秒查詢數”,通常是從數據庫或特定服務的視角看&…

如何將用戶反饋轉化為可執行需求

用戶反饋是企業優化產品、改進服務的重要依據。將用戶反饋轉化為可執行需求的核心在于通過系統化的流程對反饋進行收集、分析和分類,并結合企業的戰略目標與技術能力,制定出具體的執行方案。這一過程不僅要求企業深入理解用戶需求,還需要跨部…

ry-vue docker部署

目錄 整體架構概覽 創建 Docker 自定義網絡 Redis 部署(緩存服務) redis.conf修改 啟動 Redis 容器 測試 啟動 MySQL 容器 允許 root 用戶遠程訪問(%) 初始化數據庫(可選) RuoYi-Admin 后端服務部…

Redis之Keys命令和Scan命令

序言 網上看到的面試題:Redis有1億個key,其中10w個key是以某個固定的前綴開頭,如何將它們全部找出來?一般有兩種命令可以實現: Keys命令Scan命令 下面具體分析一下兩種命令 Keys命令 Keys pattern如下圖所示&…

【小沐學GIS】基于Godot繪制三維數字地球Earth(Godot)

🍺三維數字地球GIS系列相關文章(C)如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut&…

day62 Floyd 算法 A * 算法

Floyd 算法本題是經典的多源最短路問題.Floyd 算法對邊的權值正負沒有要求,都可以處理。Floyd算法核心思想是動態規劃。例如我們再求節點1 到 節點9 的最短距離,用二維數組來表示即:grid[1][9],如果最短距離是10 ,那就…

【軟考論文】論可觀測性架構技術的應用

🎁 考高級架構師的小伙伴注意了!📢 軟考架構論文示例 2025年11月軟考架構論文預測👍 一、歷年論文題目 無!!! 二、考情分析 “可觀測性技術”這一論題,目前在高級架構師與高級系統分…

軟件測試:測試分類(一)

常用測試分類1.功能測試(人對功能的確定,保證某個功能可以正常進行)如驗證你輸入正確的手機號碼和密碼是否登錄成功。手機號碼不存在是否有提示,密碼不正確是否有提示等2.自動化測試(如jmeter,屬于黑盒測試…

BigFoot (Method Raid Tools)[MRT] (Event Alert Mod)[EAM]

檢查法術技能ID,需要EAM命令,所以要先安裝EAM BigFoot EventAlertMod lua-CSDN博客 /eam lookup 冰封之韌 同時我們發現一個糟糕的問題,為什么會有這么多ID呢,默認第一個 還有一種法子就是讓別人開了技能告訴你ID,最…

【Scrapy-Redis】分布式爬蟲實戰(非常詳細)

一、概要 1.分布式爬蟲概念 分布式爬蟲是一種利用多臺機器協同工作的網絡爬蟲系統,通過任務分解、并行處理和資源共享,高效抓取并處理海量網頁數據。其核心在于將爬取任務分配到不同節點,避免單點性能瓶頸,同時支持動態擴展和容錯…

基于51單片機智能化交通紅綠燈堵車流量紅外設計

1 系統功能介紹 本設計題目為 基于51單片機智能化交通紅綠燈堵車流量紅外設計,主要用于十字路口交通信號智能控制,通過紅外避障檢測車流量,自動調節紅綠燈時間,緩解擁堵。該系統由單片機、LED燈、紅外避障傳感器、LCD1602液晶顯示…

VsCode 上的Opencv(C++)環境配置(Linux)

1.下載Opencv1.新建文件demo_cpp,在demo_cpp中新建third_parties文件2.OPENCV官網下載OpenCV-4.12.03.將下載好的opencv-4.12.0.zip壓縮包在third_parties中解壓,//以下均無特殊說明,均在vscode里的TERMINAL中輸入 sudo apt-get install unzip//用于解壓.zip文件 cd third_part…

sql xml模板

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.example.mapper.UserMapper&quo…

docker在自定義網絡中安裝ElasticSearch和Kibana

創建自定義網絡 創建一個名為 es-net 的橋接網絡。這將作為 Elasticsearch 和 Kibana 的私有通信通道。 # 創建網絡 docker network create es-net # 查看網絡是否創建成功 docker network ls啟動 Elasticsearch 容器 安裝命令 docker run -d \--name elasticsearch \--net…

基于51單片機射頻RFID停車刷卡計時收費系統設計

1 系統功能介紹 本設計題目為 基于51單片機射頻RFID停車刷卡計時收費系統設計&#xff0c;旨在實現停車場車輛的刷卡計時和收費管理。系統通過單片機控制&#xff0c;結合 RFID 射頻識別技術、LCD1602 顯示以及蜂鳴器報警&#xff0c;實現停車時間的智能計時、累加及超時提醒功…