溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

發(fā)布時(shí)間:2021-11-26 10:13:37 來(lái)源:億速云 閱讀:652 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

簡(jiǎn)介

算法基本思想是使用一個(gè)固定窗口在圖像上進(jìn)行任意方向上的滑動(dòng),比較滑動(dòng)前與滑動(dòng)后兩種情況,窗口中的像素灰度變化程度,如果存在任意方向上的滑動(dòng),都有著較大灰度變化,那么我們可以認(rèn)為該窗口中存在角點(diǎn)。

關(guān)于角點(diǎn)的應(yīng)用在圖像處理上比較廣泛,如圖像匹配(FPM特征點(diǎn)匹配)、相機(jī)標(biāo)定等。網(wǎng)上也有很多博客對(duì)Harris角點(diǎn)檢測(cè)原理進(jìn)行描述,但基本上只是描述了算法流程,而其中相關(guān)細(xì)節(jié)并未作出解釋?zhuān)覀兒?jiǎn)單補(bǔ)充說(shuō)明一下

角點(diǎn)

下面有兩幅不同視角的圖像,通過(guò)找出對(duì)應(yīng)的角點(diǎn)進(jìn)行匹配。

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

再看下圖所示,放大圖像的兩處角點(diǎn)區(qū)域:

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

我們可以直觀的概括下角點(diǎn)所具有的特征:

>輪廓之間的交點(diǎn);

>對(duì)于同一場(chǎng)景,即使視角發(fā)生變化,通常具備穩(wěn)定性質(zhì)的特征;

>該點(diǎn)附近區(qū)域的像素點(diǎn)無(wú)論在梯度方向上還是其梯度幅值上有著較大變化;

算法基本思想是使用一個(gè)固定窗口在圖像上進(jìn)行任意方向上的滑動(dòng),比較滑動(dòng)前與滑動(dòng)后兩種情況,窗口中的像素灰度變化程度,如果存在任意方向上的滑動(dòng),都有著較大灰度變化,那么我們可以認(rèn)為該窗口中存在角點(diǎn)

先上效果視頻

相關(guān)API

cornerHarris(InputArray src, OutputArray dst, int blockSize, int apertureSize, double k, int borderType=BORDER_DEFAULT )

參數(shù):

  • src – 輸入單通道8位或浮點(diǎn)圖像.

  • dst – 圖像存儲(chǔ)Harris檢測(cè)器響應(yīng)。它具有CVY32 FC1類(lèi)型,大小與SRC相同

  • blockSize – 鄰域大小

  • apertureSize – 索貝爾算子參數(shù)值

  • k – Harris檢測(cè)器的閾值

  • boderType – 參數(shù)

實(shí)現(xiàn)步驟

  1. 將圖像轉(zhuǎn)為灰度圖(cvtcolor)

  2. 創(chuàng)建一個(gè)CV_32FC1的同樣大小圖像(Mat::zeros(size,CV_32FC1))

  3. 進(jìn)行Harris角點(diǎn)檢測(cè)(cornerHarris)

  4. 歸一化(normalize)

  5. 轉(zhuǎn)化為絕對(duì)值(convertScaleAbs)

  6. 把獲取到的的大于閾值的的角點(diǎn)畫(huà)紅色的圓顯示出來(lái)

代碼演示

我們新建一個(gè)項(xiàng)目opencv--connerharris,簡(jiǎn)單說(shuō)一下,以后我們就不再說(shuō)了,我們把Opencv3.4.1重新用Cmake編譯了一遍,因?yàn)樽鎏仄?jiǎn)單需要加入Opencv-contrib的庫(kù),所以我們重新編譯在newbuild里了,同時(shí)編譯環(huán)境也重新配了一個(gè),配置里面多少一些DLL和LIB別的還是按照配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫(xiě)入#include和main方法

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

在上面定義一個(gè)默認(rèn)閾值和一個(gè)過(guò)程方法,因?yàn)槲覀冇玫搅薚rackbar

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

然輸出圖像上創(chuàng)建Trackbar

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

在過(guò)程前先轉(zhuǎn)為灰度圖

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

接下來(lái)就是重點(diǎn),我們的Harris_Deal的方法

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

顯示效果

C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)


以上是“C++ OpenCV特征提取之如何實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI