如何使用带有 OpenCV 的 Harris 检测器正确检测角点?

How to properly detect corners using Harris detector with OpenCV?

我正在测试一些图像处理以从数字指纹中获取 细节。目前我在做:

  1. 均衡直方图
  2. 二值化
  3. 应用张苏恩算法细化线条(这不能正常工作)。
  4. 尝试确定细化图像中的角点并显示它们。

因此,我获得的修改是:

但是,我无法获取最后一张图像中可能的角点,它属于 Mat 对象的 thinned 实例。

这是尝试获得角球的代码:

corners_image = cornerHarris(thinned,1,1,0.04)
corners_image = dilate(corners_image,None)

但是在生成的矩阵上尝试 imshow 会显示如下内容:

一个黑色图像

那我应该怎么确定角点呢?

实际上 cv::cornerHarris returns 核心反应,而不是角落本身。看起来你图片上的回复太小了。

如果你想可视化角落,你可能会得到一些更大的 threshold 参数的响应,那么你可以在原始图像上标记这些点,如下所示:

corners = cv2.cvtColor(thinned, cv2.COLOR_GRAY2BGR)
threshold = 0.1*corners_image.max()
corners [corners_image>threshold] = [0,0,255]
cv2.imshow('corners', corners)

然后调用imshow,红色点对应角点。您很可能需要调整阈值参数以获得所需的结果。

tutorial 中查看更多详细信息。