使用Python OpenCV中的Harris角检测器检测角点
在OpenCV中,使用函数 cv2.cornerHarris() 实现了Harris角检测器。它接受四个参数: img、blockSize、ksize 和 k 。其中,img是灰度输入图像,数据类型为float32,blockSize是考虑角点检测的邻域大小,ksize是使用的Sobel导数的有效值大小,k是方程中的Harris检测器自由参数。
步骤
要使用Harris角检测器检测图像中的角点,可以按照以下步骤操作:
- 导入所需库 OpenCV 和 NumPy 。确保您已经安装了它们。
-
使用 cv2.imread() 方法读取输入图像。指定图像的完整路径。使用 cv2.cvtColor() 方法将输入图像转换为灰度图像。将灰度图像的数据类型转换为 np.float32 。
-
对灰度图像(float32)应用 cv2.cornerHarris() 方法。将适当的 blockSize 、 ksize 和k传递给该方法作为参数。
-
膨胀结果以标记角点,并对最佳值应用阈值。
-
显示检测到的角点的图像。
让我们看一下使用Harris角检测器检测图像中角点的示例。
输入图像
我们在以下示例中使用此图像作为输入文件。
示例
此程序演示如何使用Harris角检测器算法检测图像中的角点−
# 导入所需库
import cv2
import numpy as np
# 加载输入图像
img = cv2.imread('sudoku.jpg')
# 将输入图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 修改数据类型设置为32位浮点型
gray = np.float32(gray)
# 应用cv2.cornerHarris方法检测角点
corners = cv2.cornerHarris(gray, 2, 3, 0.05)
# 放大结果以标记角点
corners = cv2.dilate(corners, None)
#阈值用于最佳值。
img[corners > 0.01 * corners.max()]=[0, 0, 255]
#显示带有检测到的角点的图像
cv2.imshow('Image with Corners', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当我们执行上面的代码时,将产生以下输出窗口−
上面的输出图像显示使用Harris角检测器检测到的角点。角点用红色表示。