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

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

  • 均衡直方图
  • 二值化
  • 将Zhang Suen算法应用于线条细化(这无法正常工作)
  • 尝试确定细化图像中的角点并显示它们
  • 因此,我得到的修改是:

    但是,我无法在最后一张图像中获得可能的角点,这张图像属于
    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颜色空间。