如何使用带有 OpenCV 的 Harris 检测器正确检测角点?
How to properly detect corners using Harris detector with OpenCV?
我正在测试一些图像处理以从数字指纹中获取 细节。目前我在做:
- 均衡直方图
- 二值化
- 应用张苏恩算法细化线条(这不能正常工作)。
- 尝试确定细化图像中的角点并显示它们。
因此,我获得的修改是:
但是,我无法获取最后一张图像中可能的角点,它属于 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 中查看更多详细信息。
我正在测试一些图像处理以从数字指纹中获取 细节。目前我在做:
- 均衡直方图
- 二值化
- 应用张苏恩算法细化线条(这不能正常工作)。
- 尝试确定细化图像中的角点并显示它们。
因此,我获得的修改是:
但是,我无法获取最后一张图像中可能的角点,它属于 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 中查看更多详细信息。