这里利用了Harris角点来检测物体边缘和路口拐角,其原理是:
人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。
代码如下:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while 1:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
#对图像执行harris
Harris_detector = cv2.cornerHarris(gray, 2, 3, 0.04)
#腐蚀harris结果
dst = cv2.dilate(Harris_detector, None)
# 设置阈值
thres = 0.01*dst.max()
img[dst > thres] = [255,0,0]
cv2.imshow('img',img)
k = cv2.waitKey(30)
if k == 27:
break
cap.release()
cv2.destroyAllWindows()