Python環(huán)境下使用OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)
在圖像處理中,Harris角點(diǎn)檢測(cè)是一個(gè)非常重要的技術(shù),它在焦點(diǎn)監(jiān)測(cè)、圖像匹配和圖像融合等領(lǐng)域有著廣泛的應(yīng)用。Harris角點(diǎn)檢測(cè)是許多后續(xù)算法的基礎(chǔ),其原理是在灰度圖片中尋找階躍和屋頂變化率較大的地
在圖像處理中,Harris角點(diǎn)檢測(cè)是一個(gè)非常重要的技術(shù),它在焦點(diǎn)監(jiān)測(cè)、圖像匹配和圖像融合等領(lǐng)域有著廣泛的應(yīng)用。Harris角點(diǎn)檢測(cè)是許多后續(xù)算法的基礎(chǔ),其原理是在灰度圖片中尋找階躍和屋頂變化率較大的地方,也就是角點(diǎn)的位置。
cornerHarris函數(shù)的關(guān)鍵參數(shù)
在Python中,可以通過(guò)()函數(shù)來(lái)進(jìn)行角點(diǎn)判斷。這個(gè)函數(shù)的一些關(guān)鍵參數(shù)包括:
- src: 數(shù)據(jù)類(lèi)型為float32的圖像
- blockSize: 角點(diǎn)檢測(cè)區(qū)域的大小
- ksize: Sobel求導(dǎo)中使用的窗口大小
- k: 一般取[0.04, 0.06]
- dst: 輸出圖像
- borderType: 邊界的類(lèi)型
下面是使用Python和OpenCV編寫(xiě)的角點(diǎn)檢測(cè)代碼示例:
```python
import cv2 as cv
import numpy as np
image ("c:")
('image', image)
```
角點(diǎn)的特點(diǎn)
角點(diǎn)具有以下幾個(gè)特點(diǎn):當(dāng)窗口(或核)在移動(dòng)過(guò)程中,如果窗口內(nèi)的灰度值變化很大,說(shuō)明遇到了角點(diǎn)。而如果水平或垂直方向的移動(dòng)對(duì)窗口內(nèi)的灰度值沒(méi)有太大影響,那么窗口內(nèi)部可能是一個(gè)內(nèi)部區(qū)域。
將圖像轉(zhuǎn)換為灰度并轉(zhuǎn)換為浮點(diǎn)數(shù)
在進(jìn)行角點(diǎn)檢測(cè)之前,我們需要先將圖像轉(zhuǎn)換為灰度圖,并將其轉(zhuǎn)換為浮點(diǎn)數(shù)。否則,如果不轉(zhuǎn)換為浮點(diǎn)數(shù)進(jìn)行求導(dǎo),可能會(huì)出現(xiàn)問(wèn)題。下面是代碼示例:
```python
gray (image, _BGR2GRAY)
('gray', gray)
gray np.float32(gray)
```
使用cornerHarris進(jìn)行角點(diǎn)檢測(cè)
在進(jìn)行角點(diǎn)檢測(cè)之前,我們可以選擇一個(gè)合適的參數(shù)值作為cornerHarris函數(shù)的最后一個(gè)參數(shù)。一般來(lái)說(shuō),可以選擇0.04到0.05之間的數(shù)值。下面是代碼示例:
```python
cornerHarris (gray, 2, 3, 0.041)
('cornerHarris', cornerHarris)
```
觀察結(jié)果,我們可以發(fā)現(xiàn)好像檢測(cè)到了很多角點(diǎn)。
對(duì)角點(diǎn)進(jìn)行形態(tài)學(xué)膨脹操作
為了更好地顯示角點(diǎn),可以對(duì)角點(diǎn)圖像進(jìn)行形態(tài)學(xué)膨脹操作。下面是代碼示例:
```python
dilate cv.dilate(cornerHarris, None)
('dilate', dilate)
```
尋找角點(diǎn)并標(biāo)識(shí)
通過(guò)對(duì)膨脹后的角點(diǎn)圖像進(jìn)行閾值處理,可以找出角點(diǎn)特征最明顯的區(qū)域,并將其標(biāo)識(shí)為藍(lán)色。下面是代碼示例:
```python
image[dilate > 0.1 * ()] [255, 0, 0]
('cornerHarris_result', image)
cv.waitKey(0)
()
```
通過(guò)以上步驟,我們可以檢測(cè)到圖像中的角點(diǎn),并為后續(xù)的輪廓處理打下基礎(chǔ)。