1.cv2.drawMatches(imageA, kpsA, imageB, kpsB, matches[:10], None, flags=2) # 对两个图像关键点进行连线操作
参数说明:imageA和imageB表示图片,kpsA和kpsB表示关键点, matches表示进过cv2.BFMatcher获得的匹配的索引值,也有距离, flags表示有几个图像
书籍的SIFT特征点连接:
第一步:使用sift.detectAndComputer找出关键点和sift特征向量
第二步:构建BFMatcher()蛮力匹配器,bf.match匹配sift特征向量,使用的是欧式距离
第三步:根据匹配结果matches.distance对matches按照距离进行排序
第四步:进行画图操作,使用cv2.drawMatches进行画图操作
import cv2
import numpy as np
#读入图片
imgA = cv2.imread('box.png', 0)
imgB = cv2.imread('box_in_scene.png', 0)
def cv_show(img, name):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 第一步:构造sift,求解出特征点和sift特征向量
sift = cv2.xfeatures2d.SIFT_create()
kpsA, dpA = sift.detectAndCompute(imgA, None)
kpsB, dpB = sift.detectAndCompute(imgB, None)
# 第二步:构造BFMatcher()蛮力匹配,匹配sift特征向量距离最近对应组分
bf = cv2.BFMatcher()
# 获得匹配的结果
matches = bf.match(dpA, dpB)
#第三步:对匹配的结果按照距离进行排序操作
matches = sorted(matches, key=lambda x: x.distance)
# 第四步:使用cv2.drawMacthes进行画图操作
ret = cv2.drawMatches(imgA, kpsA, imgB, kpsB, matches[:10], None, flags=2)
cv2.imshow('ret', ret)
cv2.waitKey(0)
cv2.destroyAllWindows()
来源:oschina
链接:https://my.oschina.net/u/4414351/blog/3639220