Harris 角点检测是一种用于检测图像中角点的方法,它通过分析图像中像素灰度值的变化来识别角点。这个方法基于角点的定义:在某个方向上移动图像,角点会导致图像中某些方向上的灰度变化很大。
在 OpenCV 中,可以使用 cv2.cornerHarris
函数来实现 Harris 角点检测。基本语法如下:
dst = cv2.cornerHarris(src, blockSize, ksize, k)
参数说明:
src
: 输入图像,单通道灰度图像。blockSize
: 角点检测中指定的邻域大小。ksize
: Sobel 求导中使用的窗口大小。k
: Harris 角点检测中的自由参数,通常在 0.04 到 0.06 之间。
以下是一个简单的示例,演示如何使用 Harris 角点检测:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像并转换为灰度
img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算 Harris 角点
dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
# 变换结果的数据格式
dst = cv2.dilate(dst, None)
# 通过阈值获取角点
threshold = 0.01 * dst.max()
img[dst > threshold] = [0, 0, 255] # 将角点标记为红色
# 显示原图和标记了角点的图像
plt.figure(figsize=(10, 5))
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image with Harris Corners'), plt.axis('off')
plt.subplot(122), plt.imshow(dst, cmap='gray')
plt.title('Harris Corners'), plt.axis('off')
plt.show()
在这个示例中,我们首先读取了一幅图像,并将其转换为灰度图像。然后,使用 cv2.cornerHarris
函数计算 Harris 角点,并通过阈值将角点标记在图像上。最后,通过 Matplotlib 显示原图和标记了角点的图像。 Harris 角点检测通常用于特征点的提取,例如在图像匹配和目标追踪中。