OpenCV中特征检测是计算机视觉和图像处理中的一个概念,它指的是使用计算机提取图像信息。
决定每个图像的点是否属于一个图像特征。特征检测的结思是把图像上的点分为不同的子集。
这些子集往往属于孤立的点、连续的曲线或者连续的区域。
特征检测包括边缘检测,角检测,区域检测和脊检测。
特征检测应用场景:
1、图像搜索,比如以图搜图
2、拼图游戏
3、图像拼接
今天小编就用代码实例来演示Harris角点检测。
#Harris角点检测
# 边缘处角点处灰度值变化最剧烈
# 检测窗口在图像上移动,上图对应着三种情况:
# ·在平坦区域,无论向哪个方向移动,衡量系统变换不大
# .边缘区域,垂直边缘移动时,衡量系统变换剧烈
# .在角点处,往哪个方向移动,衡量系统都变化剧烈.
# cornerHarris(src, blockSize, ksize, k[, dst[, borderType]l)
# blockSize:检测窗口大小
# ksize:sobel的卷积核
# k:权重系数,即上面公式中的a,是个经验值,一般取0.04~0.06之间.一般默认0.04
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
img = cv2.imread('./images/hand.png')
#变成灰度图片
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#harris角点检
#blockSize没有要求必须是奇数
#返回角点响应。每一个像素都可以计算出一个角点响应
dst = cv2.cornerHarris(gray, blockSize=3, ksize=3, k=0.04)
#返回的东西叫做角点响应,每一个像素点都能计算出一个角点响应来。
# print(dst)
print(dst.shape)
#显示角点
#我们认为角点响应大于0.01倍的dst.max()就可以认为是角点了.
img[dst > 0.01 * dst.max()] = [0, 0, 255]
# cv2.imshow('img', img)
cv2_imshow('img', img)
展示效果图如下:

全部评论