根据harris原理用python写一个findcorners函数返回角点列表以及绘制了角点的新图像
时间: 2024-05-02 21:18:00 浏览: 152
以下是基于Harris角点检测算法的Python代码,包括一个名为“findcorners”的函数,以及代码中的示例图像:
```python
import numpy as np
import cv2
def findcorners(img, blockSize=2, ksize=3, k=0.04, threshold=0.01):
# Convert image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Calculate Harris corner response
dst = cv2.cornerHarris(gray, blockSize, ksize, k)
# Normalize response values to range 0-255
dst_norm = np.empty_like(dst)
cv2.normalize(dst, dst_norm, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX)
# Threshold response values to identify corners
corners = np.argwhere(dst_norm > threshold * dst_norm.max())
corners = corners[:, ::-1]
# Draw corners on image
img_corners = img.copy()
for c in corners:
cv2.drawMarker(img_corners, tuple(c), color=(0, 0, 255), markerType=cv2.MARKER_CROSS, thickness=2)
return corners, img_corners
# Example usage
img = cv2.imread('example.jpg')
corners, img_corners = findcorners(img)
cv2.imshow('Original Image', img)
cv2.imshow('Corners', img_corners)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先将输入图像转换为灰度图像,然后使用`cv2.cornerHarris`函数计算Harris响应值。接下来,我们对响应值进行归一化,并将其阈值化以找到角点。最后,我们在原始图像上绘制角点,并返回角点列表以及绘制了角点的新图像。
我们可以使用以下代码来测试`findcorners`函数:
```python
img = cv2.imread('example.jpg')
corners, img_corners = findcorners(img)
cv2.imshow('Original Image', img)
cv2.imshow('Corners', img_corners)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这将加载名为“example.jpg”的图像并在屏幕上显示原始图像以及在其中找到的角点。
阅读全文