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()