通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)

目录

1 图像的特征

2,Harris角点检测

2.1  代码实现

2.2结果展示

3,Shi-Tomasi角点检测算法

3.1 , 代码实现

3.2结果展示


1 图像的特征

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第1张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第2张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第3张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第4张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第5张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第6张图片

2,Harris角点检测

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第7张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第8张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第9张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第10张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第11张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第12张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第13张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第14张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第15张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第16张图片

2.1  代码实现

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

img = cv.imread("corner.png")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#角点检测
#输入图像必须是float32
gray = np.float32(gray)

#最后一个参数在0.04-0.05之间
dst = cv.cornerHarris(gray , 2,3,0.04)  #dst变量是一个和输入灰度图像大小相同的浮点类型的矩阵,其中每个像素的值表示该像素是否是角点的概率。
'''gray:输入的灰度图像。
2:表示Sobel算子内核的大小,用于计算角点响应函数的导数。通常使用的是3x3或5x5的内核大小。
3:表示邻域窗口的大小,用于计算角点响应函数的响应值。对于每个像素点,计算其与周围像素之间的差异。
0.04:表示角点响应函数的自由参数k。k的值较小将使检测到的角点更加敏感,而k的值较大则会减少角点数量。'''

#设置阈值,将角点绘制出来,阈值根据图像进行选择
img[dst >0.001*dst.max()] = [0,0,255]
'''它会将图像 img 中响应值大于 0.001 * dst.max() 的像素点设为 [0, 0, 255],即红色。

请注意,dst.max() 表示检测到的角点响应函数的最大值。
通过乘以 0.001 ,可以设置一个相对较小的阈值,以便只有极具代表性的角点被标记为红色。你可以根据需要调整阈值大小'''
#图像显示
plt.figure(figsize=(5,4),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title("Harris角点检测")
plt.xticks([]),plt.yticks([])
plt.show()

2.2结果展示

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第17张图片

3,Shi-Tomasi角点检测算法

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第18张图片

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第19张图片

3.1 , 代码实现

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

img = cv.imread("corner.png")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#角点检测
corners = cv.goodFeaturesToTrack(gray , 1000,0.1,10)
'''
gray:输入的灰度图像。
1000:表示要检测的角点数量。这里设置为1000,表示最多检测1000个角点,但实际检测到的角点数量可能会少于这个值。
0.01:表示角点质量水平阈值,用于筛选保留哪些角点。较大的阈值会筛选出更强的角点。
10:表示角点之间的最小欧氏距离。如果两个角点之间的距离小于这个值,其中一个角点将被抑制。
'''
#绘制角点
for i in corners:
    x,y = i.ravel()
    cv.circle(img,(x,y),2,(0,0,255),-1)
#图像显示
plt.figure(figsize=(5,4),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title("shi-Tomas角点检测")
plt.xticks([]),plt.yticks([])
plt.show()

3.2结果展示

通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)_第20张图片

你可能感兴趣的:(OpenCV从入门到精通,opencv,人工智能,计算机视觉,python)