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

cv2.KeyPoint是opencv中关键点检测函数detectAndCompute()返回的关键点的类,他包含关键点的位置、方向等属性具体如下:
point2f pt;//位置坐标
float size; //特征点邻域直径
float angle; //特征点的方向,值为[0,360),负值表示不使用
float response;
int octave;//特征点所在的图像金字塔的组
int class_id;//用于聚类的id

点击查看代码
import cv2
img1=cv2.imread(r"D:\pic\shalabowa.jpg")
# Initiate SIFT detector
sift=cv2.SIFT_create()
kp1,des1=sift.detectAndCompute(img1,None)
print("数据类型:",kp1[0])
print("关键点坐标:",kp1[0].pt)# 第一个关键点位置坐标
print("邻域直径:",kp1[0].size)# 关键点邻域直径

运行结果:
数据类型: < cv2.KeyPoint 000002866DF07FC0>
关键点坐标: (2.471895694732666, 537.9429931640625)
邻域直径: 2.4969594478607178

cv2.DMatch是opencv中匹配函数(例如:knnMatch)返回的用于匹配关键点描述符的类,这个DMatch对象具有下列属性:
DMatch.distance-描述符之间的距离。越小越好。
DMatch.trainIdx- 目标图像中描述符的索引
DMatch.queryIdx- 查询图像中描述符的索引
DMatch.imgIdx- 目标图像的索引

点击查看代码
import cv2
img1=cv2.imread('data1/1.png',0) #queryImage
img2=cv2.imread('data1/2.png',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'>
描述符之间的距离: 33.0
图像中描述符的索引: 0

posted @ 2024-08-23 17:03  阳光天气  阅读(2)  评论(0编辑  收藏  举报