opencv harris角点检测 返回值
时间: 2024-07-14 12:01:27 浏览: 172
在OpenCV库中,Harris角点检测是一种用于寻找图像中兴趣点的技术,它基于Harris算子,该算子会计算出图像局部区域的梯度变化是否强烈并稳定。当你使用cv::cornerHarris()函数进行Harris角点检测时,这个函数会返回一个积分图(即原图像大小的一维数组),其中每个元素表示对应像素处的Harris响应值。
这个响应值高表明可能存在角点,因为角点通常位于纹理变化大的地方。为了找到实际的角点位置,你需要对响应图应用阈值处理,并找到那些大于阈值的局部极大值点。OpenCV提供了一个名为cornerMinEigenVal()和cornerMaxResponse()的函数组合,可以辅助你在响应图上找到角点坐标。
函数返回的结果通常是两个Mat类型的变量,一个是角点强度(响应值)矩阵,另一个是二值化后的角点位置矩阵(通常是非零元素的位置)。这两个矩阵都包含了检测到的角点信息。
相关问题
cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
好的,关于cv2.cornerHarris()函数的详解,我可以给你讲一下。
Harris 角点检测是一种经典的角点检测方法,它通过对图像中像素点的灰度值进行微小的变化,来检测出图像中的角点。在 OpenCV 中,我们可以使用 cv2.cornerHarris() 函数来进行 Harris 角点检测。
该函数的语法如下:
```Python
dst = cv2.cornerHarris(src, blockSize, ksize, k)
```
其中,参数含义如下:
- `src`:输入图像,必须是单通道 8 位或者浮点型图像。
- `blockSize`:角点检测中考虑的领域大小,一般取 2-3。
- `ksize`:Sobel 求导算子的大小,一般取 3。
- `k`:Harris 角点检测中的自由参数,取值范围为 0.04-0.06。
该函数的返回值是一个和输入图像大小相同的浮点型矩阵,其中每个元素的值表示对应像素点的角点响应值。我们可以通过设定一个阈值,来判断哪些像素点是角点,哪些是非角点。
下面是一个简单的示例代码,演示了如何使用 cv2.cornerHarris() 函数进行 Harris 角点检测:
```Python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Harris 角点检测
dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
# 归一化处理
dst_norm = cv2.normalize(dst, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
# 阈值化处理
thresh = 100
dst_norm[dst_norm < thresh] = 0
dst_norm[dst_norm >= thresh] = 255
# 显示结果
cv2.imshow('src', img)
cv2.imshow('dst', dst_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这段代码中,我们首先读取了一张测试图像,并将其转换为灰度图像。然后,使用 cv2.cornerHarris() 函数进行 Harris 角点检测,得到角点响应值矩阵 dst。接着,我们对 dst 进行了归一化处理,并设定了一个阈值,将响应值小于阈值的像素点标记为非角点,大于等于阈值的像素点标记为角点。最后,将处理结果显示出来。
希望这段代码能够帮助你理解 cv2.cornerHarris() 函数的使用。
阅读全文