第22节:使用Harris角点检测
角点是图像中具有两个主导方向的点,它们在计算机视觉中被广泛用于特征检测和匹配,因为角点在视觉内容中代表着图像的重要特征和属性。Harris角点检测算法是一个经典的角点检测方法,它能够检测出图像中的角点。本节将详细介绍Harris角点检测的原理、OpenCV中的实现方法,并通过例题加深理解。
Harris角点检测原理
Harris角点检测器的基本思想是找到图像中灰度变化较大的特征点。具体来说,算法会计算图像中每个像素点在各个方向上的灰度变化程度,如果某个像素点在多个方向上都有较大的灰度变化,则该点被认为是一个角点。
OpenCV中的Harris角点检测
在OpenCV中,Harris角点检测可以通过cv2.cornerHarris()
函数实现。
函数语法:
1cv2.cornerHarris(src, blockSize, ksize, k)
src
:输入图像,数据类型为float32。blockSize
:角点检测中要考虑的领域大小。ksize
:Sobel算子的孔径参数。k
:Harris角点检测方程中的自由参数,取值范围为[0.04, 0.06]。
返回值:
函数返回一个与输入图像同尺寸的灰度图像,其中的每个像素值代表该位置的Harris角点响应值。值越大,表示越可能是角点。
例题:使用Harris角点检测
目标:读取一幅图像并使用Harris角点检测方法找出图像中的角点。
步骤:
导入必要的库。
1import cv2
2import numpy as np
读取图像并转换为灰度图。
1img = cv2.imread('image.jpg')
2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
3gray = np.float32(gray)
应用Harris角点检测。
1dst = cv2.cornerHarris(gray, 2, 3, 0.04)
对角点进行标记。
1img[dst>0.01*dst.max()] = [0, 0, 255]
显示结果。
1cv2.imshow('Harris Corners', img)
2cv2.waitKey(0)
3cv2.destroyAllWindows()
在这个例题中,我们首先读入了一个图像,并将其转换为灰度图像。然后,我们利用cv2.cornerHarris()
函数对图像进行Harris角点检测。之后,我们通过一个简单的阈值操作将检测到的角点在原图上用红色标记出来,并显示结果图像。
通过这个例题,我们可以看到Harris角点检测是如何帮助我们找到图像中的角点,这些角点可以用于图像的特征匹配、图像识别等多种计算机视觉任务中。
这里简单介绍了一些基本知识点,更细致的内容请参考:
李立宗,OpenCV轻松入门(第2版),电子工业出版社,2023 李立宗,计算机视觉40例(从入门到深度学习:OpenCV-Python),电子工业出版社,2022
单击【阅读原文】参加OpenCV-Python课程学习。
单击【阅读原文】参加OpenCV-Python课程学习。
在本公众号【计算机视觉之光】回复关键字“叮叮当当”获取更多的Python学习资料。