您好,登錄后才能下訂單哦!
這篇文章主要介紹C++ OpenCV特征提取之如何實現Harris角點檢測,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
簡介
算法基本思想是使用一個固定窗口在圖像上進行任意方向上的滑動,比較滑動前與滑動后兩種情況,窗口中的像素灰度變化程度,如果存在任意方向上的滑動,都有著較大灰度變化,那么我們可以認為該窗口中存在角點。
關于角點的應用在圖像處理上比較廣泛,如圖像匹配(FPM特征點匹配)、相機標定等。網上也有很多博客對Harris角點檢測原理進行描述,但基本上只是描述了算法流程,而其中相關細節并未作出解釋,我們簡單補充說明一下
角點
下面有兩幅不同視角的圖像,通過找出對應的角點進行匹配。
再看下圖所示,放大圖像的兩處角點區域:
我們可以直觀的概括下角點所具有的特征:
>輪廓之間的交點;
>對于同一場景,即使視角發生變化,通常具備穩定性質的特征;
>該點附近區域的像素點無論在梯度方向上還是其梯度幅值上有著較大變化;
算法基本思想是使用一個固定窗口在圖像上進行任意方向上的滑動,比較滑動前與滑動后兩種情況,窗口中的像素灰度變化程度,如果存在任意方向上的滑動,都有著較大灰度變化,那么我們可以認為該窗口中存在角點
先上效果視頻
相關API
cornerHarris(InputArray src, OutputArray dst, int blockSize, int apertureSize, double k, int borderType=BORDER_DEFAULT )
參數:
src – 輸入單通道8位或浮點圖像.
dst – 圖像存儲Harris檢測器響應。它具有CVY32 FC1類型,大小與SRC相同
blockSize – 鄰域大小
apertureSize – 索貝爾算子參數值
k – Harris檢測器的閾值
boderType – 參數
實現步驟
將圖像轉為灰度圖(cvtcolor)
創建一個CV_32FC1的同樣大小圖像(Mat::zeros(size,CV_32FC1))
進行Harris角點檢測(cornerHarris)
歸一化(normalize)
轉化為絕對值(convertScaleAbs)
把獲取到的的大于閾值的的角點畫紅色的圓顯示出來
代碼演示
我們新建一個項目opencv--connerharris,簡單說一下,以后我們就不再說了,我們把Opencv3.4.1重新用Cmake編譯了一遍,因為做特片簡單需要加入Opencv-contrib的庫,所以我們重新編譯在newbuild里了,同時編譯環境也重新配了一個,配置里面多少一些DLL和LIB別的還是按照配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法
在上面定義一個默認閾值和一個過程方法,因為我們用到了Trackbar
然輸出圖像上創建Trackbar
在過程前先轉為灰度圖
接下來就是重點,我們的Harris_Deal的方法
顯示效果
以上是“C++ OpenCV特征提取之如何實現Harris角點檢測”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。