opencv python 曲率大一些的角点提取
时间: 2023-08-04 18:24:43 浏览: 180
可以使用OpenCV中的cornerHarris函数来提取曲率较大的角点。这个函数实现了Harris角点检测算法,可以通过调整参数来控制角点检测的精度和鲁棒性。
以下是一个示例代码,演示如何使用cornerHarris函数检测图像中的角点,并用圆圈标出它们的位置:
```python
import cv2
import numpy as np
# 读入图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算Harris角点响应函数
dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
# 标准化响应函数(0到1之间)
dst_norm = cv2.normalize(dst, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
# 阈值化响应函数,得到角点二值图像
thresh = 0.01 * dst.max()
dst_thresh = np.zeros_like(dst_norm)
dst_thresh[dst_norm > thresh] = 255
# 在原图上用圆圈标出角点
img[dst_thresh == 255] = [0, 0, 255]
cv2.imshow('corners', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在cornerHarris函数中,blockSize参数指定了角点检测时使用的邻域大小,ksize参数指定了Sobel算子的大小,k参数是Harris算法中的系数。可以通过调整这些参数来控制角点的检测精度和鲁棒性。
另外,上面的示例代码中使用了normalize函数将响应函数归一化到0到1之间,这样可以更好地可视化角点。
阅读全文