如何计算通过Harris角点检测检测到的特征数量?

问题描述 投票:0回答:2

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

python opencv image-processing feature-extraction feature-detection
2个回答
4
投票

此行查找 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())
    

0
投票
阈值:

调整阈值变量来控制角点检测的灵敏度。较高的阈值将导致检测到的角点更少,而较低的阈值将导致检测到更多的角点。 计数功能:

np.where(R_normalized > Threshold) 返回角点响应高于阈值的像素索引。这些索引的长度将为您提供检测到的特征的数量。 显示结果:

使用 image_with_corners[corners] = [0, 0, 255] 在原始图像上将角点标记为红色。 打印计数:

打印最终结果,表明图像中检测到的特征数量。 使用不同的图像和阈值进行实验,观察检测到的特征数量如何变化。这将帮助您更好地了解 Harris 角点检测算法在不同场景中的表现。

© www.soinside.com 2019 - 2024. All rights reserved.