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

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

在OpenCV中,使用函数 cv2.cornerHarris() 实现了Harris角检测器。它接受四个参数: img、blockSize、ksizek 。其中,img是灰度输入图像,数据类型为float32,blockSize是考虑角点检测的邻域大小,ksize是使用的Sobel导数的有效值大小,k是方程中的Harris检测器自由参数。

步骤

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

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

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

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

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

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

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

输入图像

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

使用Python OpenCV中的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()

输出

当我们执行上面的代码时,将产生以下输出窗口−

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程