91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

OpenCV哈里斯角檢測怎么應用

發布時間:2023-04-18 10:17:33 來源:億速云 閱讀:96 作者:iii 欄目:開發技術

這篇文章主要講解了“OpenCV哈里斯角檢測怎么應用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“OpenCV哈里斯角檢測怎么應用”吧!

理論

OpenCV哈里斯角檢測怎么應用

OpenCV哈里斯角檢測怎么應用

可以用如下圖來表示:

OpenCV哈里斯角檢測怎么應用

因此,Harris Corner Detection的結果是具有這些分數的灰度圖像。合適的閾值可提供圖像的各個角落。

OpenCV中的哈里斯角檢測

在OpenCV中有實現哈里斯角點檢測,cv2.cornerHarris()。其參數為:

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

  • src - 輸入圖像,灰度和float32類型

  • blockSize - 是拐角檢測考慮的鄰域大小

  • ksize - 使用的Sobel導數的光圈參數

  • k- 等式中的哈里斯檢測器自由參數

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()

以下是結果:

OpenCV哈里斯角檢測怎么應用

可以看到,各個角點已經標紅。

SubPixel精度的轉角

有時候可能需要找到最精確的角點。OpenCV附帶了一個函數cv2.cornerSubPix(),它進一步細化了以亞像素精度檢測到的角點。下面是一個例子。

  • 和之前一樣,首先需要先找到哈里斯角點

  • 然后通過這些角的質心(可能在一個角上有一堆像素,取它們的質心)來細化它們

  • Harris角用紅色像素標記,SubPixel角用綠色像素標記

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

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

  • image: 輸入圖像,單通道

  • corners: 輸入的初始坐標和為輸出提供的精制坐標

  • winSize: 搜索窗口的一半側面長度

  • zeroZone: 搜索區域中間的死區大小的一半在下面的公式中的求和,有時用于避免自相關矩陣的可能奇點。(−1,−1)(-1,-1)(−1,−1) 的值表示沒有這樣的尺寸

  • criteria: 終止角點細化過程的條件

# sub pixel更精度角點
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()

以下是結果, 可以看到SubPixel更精確一點:

OpenCV哈里斯角檢測怎么應用

感謝各位的閱讀,以上就是“OpenCV哈里斯角檢測怎么應用”的內容了,經過本文的學習后,相信大家對OpenCV哈里斯角檢測怎么應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

凌云县| 淮南市| 那坡县| 临城县| 香河县| 天柱县| 松潘县| 淮南市| 宁强县| 临海市| 嘉峪关市| 六枝特区| 彩票| 通山县| 囊谦县| 山东| 二连浩特市| 江油市| 罗江县| 丰原市| 西青区| 宣化县| 牡丹江市| 望江县| 和林格尔县| 阿瓦提县| 清水县| 元朗区| 西充县| 大安市| 田阳县| 邳州市| 玉溪市| 成武县| 刚察县| 青州市| 湾仔区| 望江县| 甘肃省| 阿尔山市| 盐津县|