OpenCV用于計算光流的一個類cv::optflow::DualTVL1OpticalFlow

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

cv::optflow::DualTVL1OpticalFlow 是 OpenCV 中用于計算光流的一個類,特別地,它實現了基于雙幀 TV-L1(Total Variation - L1)模型的光流算法。這種算法以其在處理速度和準確性之間的良好平衡而著稱,并且對光照變化具有一定的魯棒性。

以下是關于 cv::optflow::DualTVL1OpticalFlow 類的一些基本信息:
主要特點

  • 高效性與準確性:該算法在保持較高精度的同時提供了相對快速的計算速度。
  • 魯棒性:對于光照變化、噪聲等具有一定抵抗能力。
  • 參數調節:支持多種參數調整,以便針對不同的應用場景進行優化。

成員函數介紹

? 靜態創建函數

static Ptr<DualTVL1OpticalFlow> create();
創建一個默認參數配置的 DualTVL1OpticalFlow 實例。

? 核心計算函數

void calc(InputArray I0,           // 第一幀圖像(灰度圖)InputArray I1,           // 第二幀圖像(灰度圖)InputOutputArray flow    // 輸出光流(2通道圖像,每個像素為 (u, v))
);
用于計算兩幀圖像之間的光流。

? 參數設置函數

函數名描述
setTau(double val)設置時間步長(迭代優化的步長)
setLambda(double val)設置平滑項權重(越大越平滑)
setTheta(double val)設置對偶變量的松弛因子
setGamma(double val)設置數據項的正則化參數
setScalesNumber(int val)設置圖像金字塔層數
setWarpingsNumber(int val)設置 warp 迭代次數
setEpsilon(double val)設置收斂精度
setMaxIters(int val)設置最大迭代次數

代碼示例

#include <opencv2/opencv.hpp>
#include <opencv2/optflow.hpp>using namespace cv;
using namespace std;// 可視化光流向量為 HSV 圖像
Mat visualizeFlow( const Mat& flow )
{vector< Mat > planes;split( flow, planes );Mat mag, angle;cartToPolar( planes[ 0 ], planes[ 1 ], mag, angle, true );normalize( mag, mag, 0, 1, NORM_MINMAX );Mat hsv[ 3 ];hsv[ 0 ] = angle;hsv[ 1 ] = Mat::ones( angle.size(), CV_32F );hsv[ 2 ] = mag;Mat hsvFull;merge( hsv, 3, hsvFull );hsvFull.convertTo( hsvFull, CV_8U, 255.0 );Mat rgbOut;cvtColor( hsvFull, rgbOut, COLOR_HSV2BGR );return rgbOut;
}int main()
{// 加載兩幀灰度圖像Mat frame1 = imread( "/media/dingxin/data/study/OpenCV/sources/images/left01.jpg", IMREAD_GRAYSCALE );Mat frame2 = imread( "/media/dingxin/data/study/OpenCV/sources/images/right01.jpg", IMREAD_GRAYSCALE );if ( frame1.empty() || frame2.empty() ){cerr << "無法加載圖像!" << endl;return -1;}// 創建 DualTVL1 實例Ptr< optflow::DualTVL1OpticalFlow > tvl1 = optflow::DualTVL1OpticalFlow::create();// 計算稠密光流Mat flow;tvl1->calc( frame1, frame2, flow );// 可視化并顯示Mat flowImage = visualizeFlow( flow );imshow( "Frame 1", frame1 );imshow( "Frame 2", frame2 );imshow( "Dual TV-L1 Optical Flow", flowImage );waitKey( 0 );return 0;
}

運行結果

在這里插入圖片描述

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

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

相關文章

PyQt5在Pycharm上的環境搭建 -- Qt Designer + Pyuic + Pyrcc組合,大幅提升GUI開發效率

軟件安裝 目標軟件&#xff1a; Python解釋器Pycharm編輯器 Python官網&#xff1a; 點擊訪問Python官網 Pycharm官網&#xff1a;點擊訪問Pycharm官網 環境搭建 搭建完成后最終的環境詳情&#xff1a; python安裝路徑&#xff1a;D:\ProgramEnviron\Python\Python311Pyth…

30天打牢數模基礎-卷積神經網絡講解

案例代碼實現一、代碼說明本案例使用PyTorch實現一個改進版LeNet-5模型&#xff0c;用于CIFAR-10數據集的圖像分類任務。代碼包含以下核心步驟&#xff1a;數據加載與預處理&#xff08;含數據增強&#xff0c;劃分訓練/驗證/測試集&#xff09;&#xff1b;定義CNN網絡結構&am…

Dev-C++——winAPI貪吃蛇小游戲

&#x1f680;歡迎互三&#x1f449;&#xff1a;霧狩 &#x1f48e;&#x1f48e; &#x1f680;關注博主&#xff0c;后期持續更新系列文章 &#x1f680;如果有錯誤感謝請大家批評指出&#xff0c;及時修改 &#x1f680;感謝大家點贊&#x1f44d;收藏?評論? 今天水一篇吧…

【openbmc6】entity-manager

文章目錄 2.1 事件監聽:dbus在linux上使用的底層通信方式多半是unix domain socket ,事件的到來可被抽象為:socket上有數據,可讀 2.2 事件處理:由于主線程肯定有邏輯得跑,因此新開一個線程甚至多個線程專門用來監聽和處理事件,但存在多線程就意味著可能存在競爭,存在競…

Java 實現 UDP 多發多收通信

在網絡通信領域&#xff0c;UDP&#xff08;用戶數據報協議&#xff09;以其無連接、高效率的特點&#xff0c;在實時通信場景中占據重要地位。本文將結合一段實現 UDP 多發多收的 Java 代碼&#xff0c;詳細解析其實現邏輯&#xff0c;幫助開發者深入理解 UDP 通信的底層邏輯與…

Java學習第六十二部分——Git

目錄 一、關鍵概述 二、核心概念 三、常用命令 四、優勢因素 五、應用方案 六、使用建議 一、關鍵概述 提問&#xff1a;Git 是什么&#xff1f; 回答&#xff1a;一句話&#xff0c;分布式版本控制系統&#xff08;DVCS&#xff09;&#xff0c;用來跟蹤文件&#…

CDN和DNS 在分布式系統中的作用

一、DNS&#xff1a;域名系統&#xff08;Domain Name System&#xff09; 1. 核心功能 DNS是互聯網的“地址簿”&#xff0c;負責將人類易記的域名&#xff08;如www.baidu.com&#xff09;解析為計算機可識別的IP地址&#xff08;如180.101.50.242&#xff09;。沒有DNS&…

uniapp用webview導入本地網頁,ios端打開頁面空白問題

目前還沒解決&#xff0c;DCloud官方也說不行 IOS下webview加載本地網頁時&#xff0c;無法加載資源 - DCloud問答

軟考 系統架構設計師系列知識點之面向服務架構設計理論與實踐(8)

接前一篇文章:軟考 系統架構設計師系列知識點之面向服務架構設計理論與實踐(7) 所屬章節: 第15章. 面向服務架構設計理論與實踐 第3節 SOA的參考架構 15.3 SOA的參考架構 IBM的Websphere業務集成參考架構(如圖15-2所示,以下簡稱參考架構)是典型的以服務為中心的企業集…

基于 Docker 及 Kubernetes 部署 vLLM:開啟機器學習模型服務的新篇章

在當今數字化浪潮中&#xff0c;機器學習模型的高效部署與管理成為眾多開發者和企業關注的焦點。vLLM 作為一款性能卓越的大型語言模型推理引擎&#xff0c;其在 Docker 及 Kubernetes 上的部署方式如何呢&#xff1f;本文將深入探討如何在 Docker 及 Kubernetes 集群中部署 vL…

工業互聯網六大安全挑戰的密碼“解法”

目錄 工業互聯網密碼技術應用Q&A Q1&#xff1a;設備身份認證與接入控制 Q2&#xff1a;通信數據加密與完整性保護 Q3&#xff1a;遠程安全訪問 Q4&#xff1a;平臺與數據安全 Q5&#xff1a;軟件與固件安全 Q6&#xff1a;日志審計與抗抵賴 首傳信安-解決方案 總…

基于springboot的在線問卷調查系統的設計與實現(源碼+論文)

一、開發環境 1 Java語言 Java語言是當今為止依然在編程語言行業具有生命力的常青樹之一。Java語言最原始的誕生&#xff0c;不僅僅是創造者感覺C語言在編程上面很麻煩&#xff0c;如果只是專注于業務邏輯的處理&#xff0c;會導致忽略了各種指針以及垃圾回收這些操作&#x…

民法學學習筆記(個人向) Part.1

民法學學習筆記(個人向) Part.1有關民法條文背后的事理、人心、經濟社會基礎&#xff1b;民法的結構民法學習的特色就是先學最難的民法總論&#xff0c;再學較難的物權法、合同法等&#xff0c;最后再學習最簡單的婚姻、繼承、侵權部分。這是一個由難到易的過程&#xff0c;尤為…

ElasticSearch Doc Values和Fielddata詳解

一、Doc Values介紹倒排索引在搜索包含指定 term 的文檔時效率極高&#xff0c;但在執行相反操作&#xff0c;比如查詢一個文檔中包含哪些 term&#xff0c;以及進行排序、聚合等與指定字段相關的操作時&#xff0c;表現就很差了&#xff0c;這時候就需要用到 Doc Values。倒排…

【C語言】解決VScode中文亂碼問題

文章目錄【C語言】解決VScode中文亂碼問題彈出無法寫入用戶設置的處理方法彈出無法在只讀編輯器編輯的問題處理方法【C語言】解決VScode中文亂碼問題 &#x1f4ac;歡迎交流&#xff1a;在學習過程中如果你有任何疑問或想法&#xff0c;歡迎在評論區留言&#xff0c;我們可以共…

MySQL筆記4

一、范式1.概念與意義范式&#xff08;Normal Form&#xff09;是數據庫設計需遵循的規范&#xff0c;解決“設計隨意導致后期重構困難”問題。主流有 三大范式&#xff08;1NF、2NF、3NF&#xff09;&#xff0c;還有進階的 BCNF、4NF、5NF 等&#xff0c;范式間是遞進依賴&am…

切比雪夫不等式的理解以及推導【超詳細筆記】

文章目錄參考教程一、意義1. 正態分布的 3σ 法則2. 不等式的含義3. 不等式的意義二、不等式的證明1. 馬爾科夫不等式馬爾可夫不等式證明(YYY 為非負隨機變量 &#xff09;2. 切比雪夫不等式推導參考教程 一個視頻&#xff0c;徹底理解切比雪夫不等式 一、意義 1. 正態分布的…

Spring Boot Jackson 序列化常用配置詳解

一、引言在當今的 Web 開發領域&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已然成為數據交換的中流砥柱。無論是前后端分離架構下前后端之間的數據交互&#xff0c;還是微服務架構里各個微服務之間的通信&#xff0c;JSON 都承擔著至關重要的角色 。它…

Jetpack ViewModel LiveData:現代Android架構組件的核心力量

引言在Android應用開發中&#xff0c;數據管理和界面更新一直是開發者面臨的重大挑戰。傳統的開發方式常常導致Activity和Fragment變得臃腫&#xff0c;難以維護&#xff0c;且無法優雅地處理配置變更&#xff08;如屏幕旋轉&#xff09;。Jetpack中的ViewModel和LiveData組件正…

Python數據分析案例79——基于征信數據開發信貸風控模型

背景 雖然模型基本都是表格數據那一套了&#xff0c;算法都沒什么新鮮點&#xff0c;但是本次數據還是很值得寫個案例的&#xff0c;有征信數據&#xff0c;各種&#xff0c;個人&#xff0c;機構&#xff0c;逾期匯總..... 這么多特征來做機器學習模型應該還不錯。本次帶來&…