opencv中 cv2.KeyPoint和cv2.DMatch的理解

cv2.KeyPoint是opencv中关键点检测函数detectAndCompute()返回的关键点的类,他包含关键点的位置,方向等属性具体如下:

#point2f pt;//位置坐标
# float size; // 特征点邻域直径
#float angle; // 特征点的方向,值为[零, 三百六十),负值表示不使用
# float response;
# int octave; // 特征点所在的图像金字塔的组
# int class_id; // 用于聚类的id

代码如下:

#关键点属性
import cv2
img1 = cv2.imread('./data/33.jpg',0)
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
print("数据类型:",type(kp1[0]))
print("关键点坐标:",kp1[0].pt)#第一个关键点位置坐标
print("邻域直径:",kp1[0].size)#关键点邻域直径

运行结果:

数据类型: <class 'cv2.KeyPoint'>
关键点坐标: (6.030540943145752, 39.67108917236328)
邻域直径: 2.439194679260254

cv2.DMatch是opencv中匹配函数(例如:knnMatch)返回的用于匹配关键点描述符的类,这个DMatch 对象具有下列属性:

• DMatch.distance - 描述符之间的距离。越小越好。
• DMatch.trainIdx - 目标图像中描述符的索引。
• DMatch.queryIdx - 查询图像中描述符的索引。
• DMatch.imgIdx - 目标图像的索引。 

代码如下:

import cv2
img1 = cv2.imread('./data/33.jpg',0) # queryImage
img2 = cv2.imread('./data/3.jpg',0) # trainImage

# Initiate SIFT detector
orb = cv2.ORB_create()

# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# create BFMatcher object

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

# Match descriptors.
matches = bf.match(des1,des2)
print("数据类型:",type(matches[0]))#查看类型
print("描述符之间的距离:",matches[0].distance)# 描述符之间的距离。越小越好。
print("图像中描述符的索引:",matches[0].queryIdx)#查询图像中描述符的索引。

运行结果:
数据类型: <class 'cv2.DMatch'>
描述符之间的距离: 28.0
图像中描述符的索引: 0 

 

  • 21
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值