我对 OpenCV 和 Python 还很陌生。我正在使用以下哈里斯角点检测代码。正如您所看到的,结果也如下所示。现在,我如何计算检测到的红点特征的数量?请注意,我是初学者,因此您可能需要详细说明答案。
import cv2
import numpy as np
filename = 'image.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
此行查找 Harris 角点响应图中超出检测阈值的任何位置,并将这些位置设置为红色:
img[dst>0.01*dst.max()]=[0,0,255]
Harris 角点检测器函数返回的是一个响应图,它为您提供特定像素是角点的“概率”。因此,如果我们对这个响应图进行阈值处理,它将为我们提供图像中角点的位置。因此,这个阈值图是一个二进制掩码,它用于索引输入图像,帮助您描绘这些位置的位置。因为它是一个二进制掩码,所以您只需计算该掩码的总和即可告诉您有多少个角点:
num_corners = np.sum(dst > 0.01 * dst.max())
请注意,您应该在扩张步骤之前执行此操作,因为扩张步骤主要用于可视化,以便您可以更好地看到角点。因此,在运行 Harris 角点检测器后立即运行上面的代码:
dst = cv2.cornerHarris(gray,2,3,0.04)
num_corners = np.sum(dst > 0.01 * dst.max())
调整阈值变量来控制角点检测的灵敏度。较高的阈值将导致检测到的角点更少,而较低的阈值将导致检测到更多的角点。 计数功能:
np.where(R_normalized > Threshold) 返回角点响应高于阈值的像素索引。这些索引的长度将为您提供检测到的特征的数量。 显示结果:
使用 image_with_corners[corners] = [0, 0, 255] 在原始图像上将角点标记为红色。 打印计数:
打印最终结果,表明图像中检测到的特征数量。 使用不同的图像和阈值进行实验,观察检测到的特征数量如何变化。这将帮助您更好地了解 Harris 角点检测算法在不同场景中的表现。