Bootstrap

openCV 图像特征点检测与匹配

一、应用场景

        1.图像搜索,以图搜图。

        2.拼图游戏。

        3.图像拼接,将两张有关联的图拼接在一起。

二、基础概念

2.1 什么是图像特征?

        图像特征就是指有意义的图像区域,具有独特性、易于识别性,比如角点、斑点以及高密度区。

         从上图我们可以发现:

        A、B两图我们很难找到具体定位;

        C、D两图可以找到一些相似区域,但不太容易确定;

        E、F两图则很容易确定其定位,即特征信息丰富。

        由此,我们可以知道角点是非常重要的特征信息。

2.2 角点

        (1)在特征中最重要的是角点;

        (2)灰度梯度的最大值对应的像素点;

        (3)两条线的交点;

        (4)极值点(一阶导数最大值,但二阶导数为0)。

三、特征检测

3.1 角点检测

3.1.1 Harris角点检测

  • 光滑地区,无论向哪个移动,衡量系数不变
  • 边缘地区,垂直边缘移动时,衡量系统剧烈变化
  • 在交点处,往那个方向移动,衡量系统都发生剧烈变化

    Harris角点检测API

  • cornerHarrris(img,dst,blockSize,ksize,k)
  • blockSize: 检测窗口大小
  • ksize: Sobel的卷积核
  • k 权重系数,经验值,一般取0.02-0.04之间
import cv2
import numpy as np

# 读取图片
img = cv2.imread('./chess.png')

# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2
;