泰勒展开后得
(式子中w没有写)
将二次型标准化后的可得
c(x, y, △x,△y) = λ1x^2 + λ2y^2
根据λ1 和 λ2的大小判断是否是角点
opencv中都封装到了cv2.cornerHarris(img, blockSize, ksize, k)
img:图像,float32类型,可使用np.float32()转换
blockSize:角点检测中指定区域的大小
ksize:sobel检测中使用的窗口大小,一般为3 (Ix和Iy就是水平和垂直的梯度)
k:取值参数为[0.04, 0.06]
import numpy as np
import cv2
def show(img):
cv2.imshow('name', img)
cv2.waitKey(0)
cv2.destroyAllWindow()
img = cv2.imread('D:/C5AM383_Intensity.jpg')
img = cv2.resize(img, (600, 300))
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray = np.float32(img_gray)
corner = cv2.cornerHarris(img_gray, 2, 3, 0.04)
print(corner)
img[corner > 0.01 * corner.max()] = (0, 0, 255)
show(img)