中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ OpenCV如何實現KLT稀疏光流跟蹤

發布時間:2021-11-26 10:42:30 來源:億速云 閱讀:270 作者:小新 欄目:大數據

這篇文章主要介紹了C++ OpenCV如何實現KLT稀疏光流跟蹤,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

實現原理

首先要在初始幀中檢測特征點,之后在下一幀中嘗試跟蹤這些點。你必須找到新的圖像幀中這些點的位置,因此,你必須在特征點的先前位置附近進行搜索,以找到下一幀中它的新位置。輸入兩個連續的圖像幀以及第一幅圖像中檢測到的特征點數組,該函數將返回一組新的特征點為位置。為了跟蹤完整的序列,你需要在幀與幀之間重復這個過程,不可避免地你也會丟失其中一些點,于是被跟蹤的特征點數目會減少。為了解決這個問題,我們可以不時地檢測新的特征值。

函數API

 calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg,
                                        InputArray prevPts, InputOutputArray nextPts,
                                        OutputArray status, OutputArray err,
                                        Size winSize = Size(21,21), int maxLevel = 3,
                                        TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),
                                        int flags = 0, double minEigThreshold = 1e-4 );

參數說明:

prevImg: 第一幀(跟蹤圖像的前一幀,一般是定位特征點)
nextImg: 第二幀/當前幀
prev_Pts: 第一幀特征點集
next_Pts: 計算輸出的第二幀光流特征點集
status :  狀態標志位,如果對應特征的光流被發現,數組中的每一個元素都被設置為 1, 否則設置為 0。
err:雙精度數組,包含原始圖像碎片與移動點之間的誤差。

代碼演示

我們還是用接著上一章的DEMO,繼續往下做

定義基本數據

上面的API也提到我們會檢測當前幀和前一帖進行處理,所以我們要先定義關于前一幀及當前幀的一些相關數據,下圖紅框內就是我們定義的用于處理的基本數據。

C++ OpenCV如何實現KLT稀疏光流跟蹤

然后在檢測到特征點后判斷前一幀灰度圖是否存在,如果不存在先復制過來

C++ OpenCV如何實現KLT稀疏光流跟蹤

檢測新的特征點

C++ OpenCV如何實現KLT稀疏光流跟蹤

上面紅線標的就是我閃可能在檢測過程中出現的問題,所以我們這里也要改造一下檢測,用我們定義的ftps的參數里面設置一個數值,用于檢測如果數值小于我們設置的數后就重新檢測特征點。我們改造一下尋找特征點這塊。

先放一下原先的檢測代碼,紅框部分是我們要改造地部分

C++ OpenCV如何實現KLT稀疏光流跟蹤

下面這張是我們改造后的源代碼

C++ OpenCV如何實現KLT稀疏光流跟蹤

上面可以看出,我們把檢測出的特征點數組存放到了fpts[0]中,當前一幀的特征點小于30后我們將重新檢測,然后把檢測出的結果存放到前一幀fpts[0]和初始化的特征點IniPoints里,最后再打印一個字符,可以從命令行里看到當前狀態是在檢測特征點,當特征點大于30時我們就打印一個檢測的字符。

實現稀疏光流跟蹤

首先我們先在最上方定義一個HLK跟蹤的方法及跟蹤成功的狀態和誤差參數

C++ OpenCV如何實現KLT稀疏光流跟蹤

然后我們在寫這個方法,這里就用到了我們的calcOpticalFlowPyrLK函數API

C++ OpenCV如何實現KLT稀疏光流跟蹤

C++ OpenCV如何實現KLT稀疏光流跟蹤

然后在上面的跟蹤那里加入這個方法

C++ OpenCV如何實現KLT稀疏光流跟蹤

繪制源圖

最后在源圖上畫出特征點并把當前幀數據放到前一幀里,由于我們把前一幀數據已經轉移到了fpts[0]里,所以這里也改為過來,然后我們又加入了畫出直線的一個操作,用于觀察移動的原點與現在的一個距離。

C++ OpenCV如何實現KLT稀疏光流跟蹤

下面是視頻中的截圖

C++ OpenCV如何實現KLT稀疏光流跟蹤

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C++ OpenCV如何實現KLT稀疏光流跟蹤”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

义马市| 平远县| 安宁市| 永清县| 长治县| 介休市| 东光县| 定结县| 大埔县| 嘉祥县| 彰化县| 察雅县| 沂源县| 海淀区| 汕头市| 平罗县| 明水县| 洱源县| 双江| 宜阳县| 宕昌县| 磐石市| 平昌县| 张掖市| 佛学| 肇州县| 昆山市| 高安市| 芜湖县| 周口市| 清镇市| 郑州市| 平阳县| 资讯| 富民县| 清丰县| 兰西县| 鄯善县| 沁阳市| 合阳县| 繁昌县|