Shi-Tomasi角点检测
原理
corners = cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance)
参数:
- image:输入的灰度图像
- maxCorners:获取角点数的数目
- qualityLevel:该参数指出最低可接受的角点质量水平,在0-1之间
- minDistance:角点之间的最小欧氏距离,避免得到相邻特征点
返回值:
- corners:搜索到的角点,在这里所有低于质量水平的角点被排除掉,然后把合格的角点按质量排序,然后将质量较好的角点附近(小于最小欧式距离)的角点删掉,最后找到maxCorners个角点返回。
代码编写
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
src = cv.imread("E:\\qi.png")
img = src.copy()
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 角点检测
corners = cv.goodFeaturesToTrack(img_gray, 1000, 0.01, 10)
# 绘制角点
for i in corners:
x, y = i.ravel()
cv.circle(img, (int(x), int(y)), 3, (0, 0, 255), -1)
# 显示图像
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(src[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(img[:, :, ::-1])
axes[1].set_title("Shi-Tomasi角点检测后的图像")
plt.show()