Python 如何使用带OpenCV的Harris检测器正确检测角点?
我正在测试一些图像处理,以从数字指纹中获取细节。到目前为止,我正在做:Python 如何使用带OpenCV的Harris检测器正确检测角点?,python,opencv,image-processing,Python,Opencv,Image Processing,我正在测试一些图像处理,以从数字指纹中获取细节。到目前为止,我正在做: 均衡直方图 二值化 将Zhang Suen算法应用于线条细化(这无法正常工作) 尝试确定细化图像中的角点并显示它们 因此,我得到的修改是: 但是,我无法在最后一张图像中获得可能的角点,这张图像属于thinked对象的Mat实例 这是尝试获取角点的代码: corners_image = cornerHarris(thinned,1,1,0.04) corners_image = dilate(corners_image,N
thinked
对象的Mat
实例
这是尝试获取角点的代码:
corners_image = cornerHarris(thinned,1,1,0.04)
corners_image = dilate(corners_image,None)
但在结果矩阵上尝试imshow
,将显示如下内容:
黑色图像
那么我应该如何确定角点呢?实际上
cv::cornerHarris
返回corener响应,而不是角点本身。看起来您的图像上的响应太小
如果要可视化角点,您可能会得到比某个阈值
参数更大的响应,然后您可以在原始图像上标记这些点,如下所示:
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
,红色点将对应于角点。最有可能的情况是,您需要调整阈值参数以获得所需的结果
请参阅中的更多详细信息。我以前尝试过类似的方法,但失败了,因为它抱怨了一些numpy问题,我认为由于图像是二进制的,并且试图在3大小的列表上进行修改OK,这是我的错。我更新了答案。我只需要将二进制图像转换为BGR颜色空间。