当前位置:   article > 正文

opencv SIFT关键点检测+计算SIFT描述子_sift drawkeypoints

sift drawkeypoints

SIFT(Scale-Invariant Feature Transfrom)

SIFT出现的原因

  • Harris 角点具有旋转不变的特性
  • 但缩放后,原来的角点有可能就不是角点了

在这里插入图片描述

使用SIFT的步骤

  • 创建SIFT对象
  • 进行检测,kp = sift.detect(img,…)
  • 绘制关键点,drawKeypoints(gray, kp, img)
import cv2 as cv
import numpy as np

# 读取图片
img = cv.imread(r'C:\Users\Administrator\Desktop\chess.png')
# 灰度化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 检测特征点
sift = cv.xfeatures2d.SIFT_create()  # 创建SIFT对象
kp = sift.detect(gray, None)   # 对整个图像进行检测,掩码设为None
cv.drawKeypoints(gray, kp, img)  # 绘制特征点

# 显示图像
cv.imshow('img', img)
cv.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

计算SIFT描述子

关键点和描述子

  • 关键点:位置,大小和方向
  • 关键点描述子:记录了关键点周围对其有贡献的像素点的一组向量值,其不受仿射变换、光照变换等的影响

计算描述子

  • kp,des=sift.compute(img,kp)
  • 其作用就是进行特征匹配

同时计算关键点和描述子的API

  • kp,des=sift.detectAndCompute(img,…)
  • mask:指明对img中哪个区域进行计算
import cv2 as cv
import numpy as np

# 读取图片
img = cv.imread(r'C:\Users\Administrator\Desktop\chess.png')
# 灰度化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 检测特征点+描述子
sift = cv.xfeatures2d.SIFT_create()  # 创建SIFT对象
kp, des = sift.detectAndCompute(gray, None)   # 对整个图像进行检测,掩码设为None
print(des)
cv.drawKeypoints(gray, kp, img)  # 绘制特征点

# 显示图像
cv.imshow('img', img)
cv.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

C:\ProgramData\Anaconda3\envs\tensorflow\python.exe H:/python_study/opencv/BILILI/sift.py 
[[  0.   0.   6. ...   0.   0.   2.]
 [  0.  64. 129. ...   0.   0.   9.]
 [  0.   0.   1. ...   0.   0.   2.]
 ...
 [  0.   0.  20. ...  13.   0.   0.]
 [  8.   5.   4. ...   0.   0.   1.]
 [  0.  42. 111. ...   0.   0.   4.]]

进程已结束,退出代码0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/79014
推荐阅读
相关标签
  

闽ICP备14008679号