cv2.cornerHarris 例子
时间: 2023-07-24 10:18:45 浏览: 43
cv2.cornerHarris是OpenCV中用于角点检测的函数,它可以检测出图像中的拐角,返回角点图像。
下面是一个使用cv2.cornerHarris函数的简单例子:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 转换成灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 使用cv2.cornerHarris函数进行角点检测
dst = cv2.cornerHarris(gray,2,3,0.04)
# 结果转换为uint8类型的图像
dst = cv2.convertScaleAbs(dst)
# 在原图像上绘制角点
img[dst>0.01*dst.max()]=[0,0,255]
# 显示图像
cv2.imshow('dst',img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
```
在这个例子中,首先读入了一张图片,将其转换为灰度图像,然后使用cv2.cornerHarris函数进行角点检测,返回的结果dst是一个和原图像大小相同的单通道图像,其中每个像素代表该点的角点响应值。
最后,我们将结果转换为uint8类型的图像,找到大于0.01倍最大响应值的像素点,将其在原图像上标记为红色,最终显示结果。
相关问题
python cv2.cornerHarris
`cv2.cornerHarris()`是OpenCV库中用于角点检测的函数之一。它基于Harris角点检测算法,用于识别图像中的角点。
下面是一个使用`cv2.cornerHarris()`函数进行角点检测的示例:
```python
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg', 0) # 替换为你的图像路径
# 转换为float32类型
image = np.float32(image)
# 执行角点检测
dst = cv2.cornerHarris(image, blockSize=2, ksize=3, k=0.04)
# 标记角点
dst = cv2.dilate(dst, None)
image[dst > 0.01 * dst.max()] = 255
# 显示结果
cv2.imshow('Corner Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述示例中,我们首先使用`cv2.imread()`函数读取一张图像。然后,我们将图像转换为float32类型。接下来,我们使用`cv2.cornerHarris()`函数执行角点检测,其中`blockSize`参数指定邻域大小,`ksize`参数指定Sobel导数的孔径大小,`k`参数为角点检测方程中的自由参数。
然后,我们使用`cv2.dilate()`函数对角点结果进行膨胀操作,并将大于阈值的角点位置标记为白色。最后,我们使用`cv2.imshow()`和`cv2.waitKey()`函数显示图像中的角点。
请注意,此示例假设输入图像是灰度图像。如果你的图像是彩色图像,可以使用`cv2.cvtColor()`函数将其转换为灰度图像。
介绍cv2.cornerHarris
`cv2.cornerHarris` 是 OpenCV 中用于检测角点(Corner)的函数。角点是图像中比较特殊的点,它们是两条边缘线交叉处的点,通常被用于图像识别、三维重建等领域。
`cv2.cornerHarris` 函数的调用形式如下:
```
dst = cv2.cornerHarris(src, blockSize, ksize, k)
```
其中:
- `src`:待检测的输入图像,必须为单通道浮点型图像。
- `blockSize`:角点检测时考虑的邻域大小,一般取值为 2、3、4、5、6、7 等。
- `ksize`:Sobel 算子的大小,一般取值为 3。
- `k`:角点检测参数,一般取值范围为 0.04~0.06。
函数的返回值是一个与输入图像大小相同的单通道浮点型图像,其中图像的每个像素值表示该点的角点响应程度,响应程度越高则表示该点越有可能是角点。
使用 `cv2.cornerHarris` 函数进行角点检测的一般步骤如下:
1. 读入待检测的图像并将其转换为灰度图像。
2. 对灰度图像进行角点检测。
3. 根据角点响应程度对图像中的角点进行筛选。
4. 在原图像中标注出检测到的角点。
值得注意的是,`cv2.cornerHarris` 函数只能检测到图像中的角点,对于其他特征点(如直线端点、交叉点等),需要使用其他的算法进行检测。