本文共 2112 字,大约阅读时间需要 7 分钟。
使用ORB描述符进行Brute-Force匹配
import cv2import matplotlib.pyplot as pltimport numpy as npimg= cv2.imread('te1.png')img1 = cv2.imread('te2.png')orb = cv2.ORB_create()#找到特征点kp1,des1 = orb.detectAndCompute(img,None)kp2,des2 = orb.detectAndCompute(img1, None)#创建BF匹配器对象bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck =True)matches = bf.match(des1, des2)#按距离排序matches = sorted(matches, key = lambda x:x.distance) ##特征匹配img2 = cv2.drawMatches(img,kp1,img1,kp2,matches[:10],None,flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)cv2.imshow('img2',img2)cv2.waitKey(0)cv2.destroyAllWindows()带有SIFT描述符和比例测试的Brute-Force匹配
import cv2import matplotlib.pyplot as pltimport numpy as npimg= cv2.imread('te1.png')img1 = cv2.imread('te2.png')orb = cv2.xfeatures2d.SIFT_create()#找到特征点kp1,des1 = orb.detectAndCompute(img,None)kp2,des2 = orb.detectAndCompute(img1, None)#创建BF匹配器对象bf = cv2.BFMatcher()matches = bf.knnMatch(des1,des2,k=2)good = []比例设置0.55,数字越大匹配数量越多误差越大for m,n in matches: if m.distance < 0.55*n.distance: good.append([m])img2 =cv2.drawMatchesKnn(img,kp1,img1,kp2,good,None,flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)cv2.imshow('img2',img2)cv2.waitKey(0)cv2.destroyAllWindows()基于匹配器的FLANN
import cv2import matplotlib.pyplot as pltimport numpy as npimg= cv2.imread('te1.png')img1 = cv2.imread('te2.png')orb = cv2.xfeatures2d.SIFT_create()#找到特征点kp1,des1 = orb.detectAndCompute(img,None)kp2,des2 = orb.detectAndCompute(img1, None)#创建BF匹配器对象FLANN_INDEX_KDTREE = 1index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)search_params = dict(checks=50) # 或传递一个空字典flann = cv2.FlannBasedMatcher(index_params,search_params)matches = flann.knnMatch(des1,des2,k=2)#matcMask用于将特征的标出来matchesMask = [[0,0] for i in range(len(matches))]#设置比例for i,(m,n) in enumerate(matches): if m.distance < 0.55*n.distance: matchesMask[i]=[1,0]#一般特征的为蓝色,匹配后成为绿色draw_params = dict(matchColor = (0,255,0), singlePointColor = (255,0,0), matchesMask = matchesMask,flags = cv2.DrawMatchesFlags_DEFAULT)img2 =cv2.drawMatchesKnn(img,kp1,img1,kp2,matches,None,**draw_params)cv2.imshow('img2',img2)cv2.waitKey(0)cv2.destroyAllWindows()
转载地址:http://shben.baihongyu.com/