使用 Python OpenCV 中的 Harris 角点检测器检测角点


在 OpenCV 中,Harris 角点检测器使用函数cv2.cornerHarris()实现。它接受四个参数:img、blockSize、ksize和 k。其中 img 是灰度输入图像,数据类型为 float32,blockSize是用于角点检测的邻域大小,ksize是所用 Sobel 导数的孔径参数,k 是公式中的 Harris 检测器自由参数。

步骤

要使用 Harris 角点检测器在图像中检测角点,您可以按照以下步骤操作

  • 导入所需的库OpenCVNumPy。确保您已安装它们。

  • 使用cv2.imread()方法读取输入图像。指定图像的完整路径。使用cv2.cvtColor()方法将输入图像转换为灰度图像。将灰度图像的数据类型转换为np.float32

  • 在灰度图像(float32)上应用cv2.cornerHarris()方法。将合适的blockSizeksize和 k 作为参数传递给该方法。

  • 膨胀结果以标记角点,并对最佳值应用阈值。

  • 显示检测到角点的图像。

让我们看看使用 Harris 角点检测器在图像中检测角点的示例。

输入图像

我们在下面的示例中使用此图像作为输入文件。


示例

此程序演示如何使用 Harris 角点检测器算法在图像中检测角点 -

# import required libraries import cv2 import numpy as np # load the input image img = cv2.imread('sudoku.jpg') # convert the input image into grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # modify the data type setting to 32-bit floating point gray = np.float32(gray) # apply the cv2.cornerHarris method to detect the corners corners = cv2.cornerHarris(gray, 2, 3, 0.05) #result is dilated for marking the corners corners = cv2.dilate(corners, None) # Threshold for an optimal value. img[corners > 0.01 * corners.max()]=[0, 0, 255] # the window showing output image with corners cv2.imshow('Image with Corners', img) cv2.waitKey(0) cv2.destroyAllWindows()

输出

当我们执行以上代码时,它将生成以下输出窗口 -


以上输出图像显示了使用 Harris 角点检测器检测到的角点。角点以红色显示。

更新于: 2022年12月2日

3K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始
广告