opencv亚像素角点检测
时间: 2023-09-02 15:08:58 浏览: 122
亚像素角点检测是一种精细的角点检测方法,可以更准确地定位图像中的角点。OpenCV中提供了cornerSubPix()函数来实现亚像素角点检测。
使用方法如下:
1. 首先进行角点检测,可以使用cornerHarris()或者cornerMinEigenVal()等函数。
2. 对于检测到的角点,使用cornerSubPix()函数进行亚像素级别的精细定位。
3. 调用cornerSubPix()函数时,需要传入原始图像、角点坐标、搜索窗口大小等参数,函数会返回精细定位后的角点坐标。
示例代码如下:
```
import cv2
# 读取图像
img = cv2.imread('test.jpg')
# 进行角点检测
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
corners = cv2.cornerHarris(gray, 2, 3, 0.04)
# 取出角点坐标
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10)
corners = np.int0(corners)
# 进行亚像素角点检测
corners_sub = cv2.cornerSubPix(gray, corners, (5, 5), (-1, -1),
criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))
# 在图像上绘制角点
for i in corners:
x, y = i.ravel()
cv2.circle(img, (x, y), 3, (0, 0, 255), -1)
for i in corners_sub:
x, y = i.ravel()
cv2.circle(img, (x, y), 3, (0, 255, 0), -1)
# 显示图像
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们先使用cornerHarris()函数进行角点检测,然后使用goodFeaturesToTrack()函数取出角点坐标。最后使用cornerSubPix()函数进行亚像素级别的角点精细定位,并在图像上绘制出检测结果。
阅读全文