opencv 特征点检测与匹配-Harris角点检测+shi-Tomasi角点检测

opencv 特征检测的应用场景

  • 图像搜索,如以图搜图

  • 拼图游戏

  • 图像拼接,将两个有关联的图拼接到一起

拼图方法

  • 寻找特征
  • 特征是唯一的
  • 可追踪的
  • 能比较的

opencv 特征点检测与匹配-Harris角点检测+shi-Tomasi角点检测_第1张图片

  • 平坦部分很难找到它在原图的位置
  • 边缘相比平坦要好找一些,但也不能一下确定
  • 角点可以一下就能找到其在原图的位置

什么是特征

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

角点

  • 在特征中最重要的是角点
  • 灰度梯度的最大值对应的像素
  • 两条线的交点
  • 极值点(一阶导数最大,但二阶导数为0)

Harris角点检测

opencv 特征点检测与匹配-Harris角点检测+shi-Tomasi角点检测_第2张图片
Harris点

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

API

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

# 读取文件
img = cv.imread(r'C:\Users\Administrator\Desktop\hello.jpg')
# 灰度化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# Harris角点检测
dst = cv.cornerHarris(gray,blockSize=2, ksize=3, k=0.04)

img[dst > 0.01*dst.max()] = [0, 0, 255]

cv.imshow('harris', img)
cv.waitKey(0)

opencv 特征点检测与匹配-Harris角点检测+shi-Tomasi角点检测_第3张图片

shi-Tomasi角点检测

  • shi- tomasi是Harris角点检测的改进
  • Harris角点检测算的稳定性和k有关,而k是个经验值,不好设定最佳值

goodFeaturesToTrack(img,maxCorners,…)

  • maxCorners:角点的最大数,值为0表示无限制
  • qualityLevel:小于1.0的正数,一般在0.01-0.1之间
  • minDistance:角之间最小欧式距离,忽略小于此距离的点
  • mask: 感兴趣的区域
  • blockSize:检测窗口
  • useHarrisDectector:是否使用Harris算法
  • k :默认是0.04
import cv2 as cv
import numpy as np

# 读取文件
img = cv.imread(r'C:\Users\Administrator\Desktop\hello.jpg')
# 灰度化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# Harris角点检测
# dst = cv.cornerHarris(gray,blockSize=2, ksize=3, k=0.04)

# shi-Tomasi角点检测
corners = cv.goodFeaturesToTrack(gray, maxCorners=1000, qualityLevel=0.01, minDistance=10)
# img[dst > 0.01*dst.max()] = [0, 0, 255]
corners= np.int0(corners)
print(corners)
for i in corners:
    x, y = i.ravel()
    cv.circle(img, (x, y), 3, (0, 255, 0),-1)


cv.imshow('harris', img)
cv.waitKey(0)

opencv 特征点检测与匹配-Harris角点检测+shi-Tomasi角点检测_第4张图片

opencv 特征点检测与匹配-Harris角点检测+shi-Tomasi角点检测_第5张图片

你可能感兴趣的:(opencv,基础,python基础,opencv,计算机视觉,人工智能)