角点检测


泰勒展开后得

(式子中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)

posted @ 2021-09-15 22:43  WTSRUVF  阅读(118)  评论(0编辑  收藏  举报