欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV哈里斯角檢測(cè)|Harris?Corner理論實(shí)踐

 更新時(shí)間:2023年04月13日 09:50:06   作者:uncle_ll  
這篇文章主要為大家介紹了OpenCV哈里斯角檢測(cè)|Harris?Corner理論實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

目標(biāo)

在本章中,將學(xué)習(xí)

  • "Harris Corner Detection”背后的思想
  • 函數(shù):cv2.cornerHarris(),cv.2cornerSubPix()

理論

可以用如下圖來(lái)表示:

因此,Harris Corner Detection的結(jié)果是具有這些分?jǐn)?shù)的灰度圖像。合適的閾值可提供圖像的各個(gè)角落。

OpenCV中的哈里斯角檢測(cè)

在OpenCV中有實(shí)現(xiàn)哈里斯角點(diǎn)檢測(cè),cv2.cornerHarris()。其參數(shù)為:

dst = cv2.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]] )

  • src - 輸入圖像,灰度和float32類型
  • blockSize - 是拐角檢測(cè)考慮的鄰域大小
  • ksize - 使用的Sobel導(dǎo)數(shù)的光圈參數(shù)
  • k- 等式中的哈里斯檢測(cè)器自由參數(shù)
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('chessboard.png')
img_copy = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# result is dilated for marking the corners, not important
dst = cv2.dilate(dst, None)
# Threshold for an optimal value, it may vary depending on the image.
img[dst >0.01*dst.max()]=[255,0,0]
# plot
plt.subplot(121)
plt.imshow(img_copy, cmap='gray')
plt.xticks([])
plt.yticks([])
plt.subplot(122)
plt.imshow(img, cmap='gray')
plt.xticks([])
plt.yticks([])
plt.show()

以下是結(jié)果:

可以看到,各個(gè)角點(diǎn)已經(jīng)標(biāo)紅。

SubPixel精度的轉(zhuǎn)角

有時(shí)候可能需要找到最精確的角點(diǎn)。OpenCV附帶了一個(gè)函數(shù)cv2.cornerSubPix(),它進(jìn)一步細(xì)化了以亞像素精度檢測(cè)到的角點(diǎn)。下面是一個(gè)例子。

  • 和之前一樣,首先需要先找到哈里斯角點(diǎn)
  • 然后通過(guò)這些角的質(zhì)心(可能在一個(gè)角上有一堆像素,取它們的質(zhì)心)來(lái)細(xì)化它們
  • Harris角用紅色像素標(biāo)記,SubPixel角用綠色像素標(biāo)記

對(duì)于cv2.cornerSubPix()函數(shù),必須定義停止迭代的條件。我們可以在特定的迭代次數(shù)或達(dá)到一定的精度后停止它。此外,還需要定義它將搜索角點(diǎn)的鄰居的大小。

corners = cv.cornerSubPix( image, corners, winSize, zeroZone, criteria )

  • image: 輸入圖像,單通道
  • corners: 輸入的初始坐標(biāo)和為輸出提供的精制坐標(biāo)
  • winSize: 搜索窗口的一半側(cè)面長(zhǎng)度
  • zeroZone: 搜索區(qū)域中間的死區(qū)大小的一半在下面的公式中的求和,有時(shí)用于避免自相關(guān)矩陣的可能奇點(diǎn)。(−1,−1)(-1,-1)(−1,−1) 的值表示沒(méi)有這樣的尺寸
  • criteria: 終止角點(diǎn)細(xì)化過(guò)程的條件
# sub pixel更精度角點(diǎn)
import cv2
import numpy as np
img = cv2.imread('chessboard2.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# find Harris corners
dst = cv2.cornerHarris(gray,2, 3, 0.04)
dst = cv2.dilate(dst, None)
ret, dst = cv2.threshold(dst, 0.01*dst.max(), 255,0)
dst = np.uint8(dst)
# find centroids
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)
# define the criteria to stop and refine the corners
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)
corners = cv2.cornerSubPix(gray, np.float32(centroids), (5, 5), (-1, -1), criteria)
# Now draw them
res = np.hstack((centroids,corners))
res = np.int0(res)
img[res[:,1],res[:,0]]=[0,0,255]
img[res[:,3],res[:,2]] = [0,255,0]
cv2.imshow('subpixel', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

以下是結(jié)果, 可以看到SubPixel更精確一點(diǎn):

附加資源

docs.opencv.org/4.1.2/dd/d1…

docs.opencv.org/4.1.2/dd/d1…

docs.opencv.org/4.1.2/dd/d1…

docs.opencv.org/4.1.2/d4/d8…

docs.opencv.org/4.1.2/dd/d1…

以上就是OpenCV哈里斯角檢測(cè)|Harris Corner理論實(shí)踐的詳細(xì)內(nèi)容,更多關(guān)于OpenCV哈里斯角檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • matplotlib圖例legend語(yǔ)法及設(shè)置的方法

    matplotlib圖例legend語(yǔ)法及設(shè)置的方法

    這篇文章主要介紹了matplotlib圖例legend語(yǔ)法及設(shè)置的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 解決Jupyter notebook中.py與.ipynb文件的import問(wèn)題

    解決Jupyter notebook中.py與.ipynb文件的import問(wèn)題

    這篇文章主要介紹了解決Jupyter notebook中.py與.ipynb文件的import問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python 迭代,for...in遍歷,迭代原理與應(yīng)用示例

    Python 迭代,for...in遍歷,迭代原理與應(yīng)用示例

    這篇文章主要介紹了Python 迭代,for...in遍歷,迭代原理與應(yīng)用,結(jié)合實(shí)例形式分析了Python迭代與遍歷的相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python中的time模塊和calendar模塊

    Python中的time模塊和calendar模塊

    這篇文章主要介紹了Python中的time模塊和calendar模塊,在Python中對(duì)時(shí)間和日期的處理方式有很多,其中轉(zhuǎn)換日期是最常見(jiàn)的一個(gè)功能。Python中的時(shí)間間隔是以秒為單位的浮點(diǎn)小數(shù)。下面來(lái)看看文章具體內(nèi)容的介紹,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-11-11
  • 一文詳解Python加解壓文件gzip庫(kù)的操作

    一文詳解Python加解壓文件gzip庫(kù)的操作

    Gzip是若干種文件壓縮程序的簡(jiǎn)稱,通常指GNU計(jì)劃的實(shí)現(xiàn)。本文為大家介紹了Python中加解壓文件gzip庫(kù)的基本操作,感興趣的小伙伴可以了解一下
    2022-11-11
  • Python3實(shí)現(xiàn)購(gòu)物車功能

    Python3實(shí)現(xiàn)購(gòu)物車功能

    這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)購(gòu)物車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python pymsql模塊的使用

    Python pymsql模塊的使用

    這篇文章主要介紹了Python pymsql模塊的使用,幫助大家我們利用 python 語(yǔ)言與 mysql 進(jìn)行鏈接,感興趣的朋友可以了解下
    2020-09-09
  • Python max內(nèi)置函數(shù)詳細(xì)介紹

    Python max內(nèi)置函數(shù)詳細(xì)介紹

    這篇文章主要介紹了Python MAX內(nèi)置函數(shù)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Python中sys模塊常用方法與變量實(shí)例探究

    Python中sys模塊常用方法與變量實(shí)例探究

    sys?模塊是 Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)核心模塊,提供了與解釋器進(jìn)行交互的功能,了解?sys?模塊的方法和變量對(duì)于更有效地管理和調(diào)試 Python 程序至關(guān)重要,本文將深入探討?sys?模塊的常用方法和變量,通過(guò)詳細(xì)的示例代碼,幫助大家更全面地了解并靈活運(yùn)用這一關(guān)鍵模塊
    2024-01-01
  • Python Flask框架開(kāi)發(fā)之運(yùn)用SocketIO實(shí)現(xiàn)WebSSH方法詳解

    Python Flask框架開(kāi)發(fā)之運(yùn)用SocketIO實(shí)現(xiàn)WebSSH方法詳解

    Socket.IO本是一個(gè)面向?qū)崟r(shí)web應(yīng)用的JavaScript庫(kù),現(xiàn)在已成為擁有眾多語(yǔ)言支持的Web即時(shí)通訊應(yīng)用的框架。這篇文章主要介紹了Python 運(yùn)用SocketIO實(shí)現(xiàn)WebSSH方法
    2022-10-10

最新評(píng)論