OpenCV 中的 Harris 角点检测是一种图像处理技术,它可以通过对图像进行 Harris 角点检测来检测图像中的角点。在 OpenCV 中,可以使用 cv2.cornerHarris() 函数来实现 Harris 角点检测。
使用 cv2.cornerHarris() 函数的基本语法如下:
dst = cv2.cornerHarris(src, blockSize, ksize, k)
其中,src 是输入图像,blockSize 是角点检测中使用的邻域大小,ksize 是 Sobel 滤波器的大小,k 是 Harris 角点检测中的自由参数。
以下是两个示例说明:
示例一:使用 Harris 角点检测检测图像中的角点
要使用 Harris 角点检测检测图像中的角点,可以使用以下代码:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 转换颜色空间
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算 Harris 角点
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 标记角点
dst = cv2.dilate(dst, None)
img[dst > 0.01 * dst.max()] = [0, 0, 255]
# 显示图像
cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()
这将读取名为 image.jpg 的图像,并使用 Harris 角点检测检测图像中的角点。最终结果将在窗口中。
示例二:使用 Harris 角点检测进行图像拼接
要使用 Harris 角点检测进行图像拼接,可以使用以下代码:
import cv2
import numpy as np
# 读取图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 转换颜色空间
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 计算 Harris 角点
dst1 = cv2.cornerHarris(gray1, 2, 3, 0.04)
dst2 = cv2.cornerHarris(gray2, 2, 3, 0.04)
# 标记角点
dst1 = cv2.dilate(dst1, None)
dst2 = cv2.dilate(dst2, None)
img1[dst1 > 0.01 * dst1.max()] = [0, 0, 255]
img2[dst2 > 0.01 * dst2.max()] = [0, 0, 255]
# 寻找匹配点
kp1 = cv2.KeyPoint_convert(np.argwhere(dst1 > 0.01 * dst1.max()))
kp2 = cv2.KeyPoint_convert(np.argwhere(dst2 > 0.01 * dst2.max()))
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(gray1, gray2)
# 绘制匹配点
matches = sorted(matches, key=lambda x: x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
# 显示图像
cv2.imshow('image', img3)
cv2.waitKey()
cv2.destroyAllWindows()
这将读取名为 image1.jpg 和 image2.jpg 的两张图像,并使用 Harris 角点检测进行图像拼接。最终结果将在窗口中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Opencv Harris角点检测第一步 - Python技术站