1 问题描述
把一堆图片按照与给出的一张图片的相似度进行排序
2 程序
可以从图片中提取SIFT特征,对两幅图片的SIFT特征进行匹配并按照一定条件删选就能得到两幅图片的匹配点个数,匹配点个数越多,相似度越高
import cv2
from matplotlib import pyplot as plt
import numpy as np
import os
import math
def getMatchNum(matches,ratio):
'''返回特征点匹配数量和匹配掩码'''
matchesMask=[[0,0] for i in range(len(matches))]
matchNum=0
for i,(m,n) in enumerate(matches):
if m.distance<ratio*n.distance: #将距离比率小于ratio的匹配点删选出来
matchesMask[i]=[1,0]
matchNum+=1
return (matchNum,matchesMask)
path='D:/CodeProjects/AnacondaSamples/HandleImages/'
queryPath=path+'QueryImages2/' #图库路径
samplePath=path+'SampleImages/sample2.jpg' #样本图片
comparisonImageList=[] #记录比较结果
#创建SIFT特征提取器
sift = cv2.xfeatures2d.SIFT_create()
#创建FLANN匹配对象
FLANN_INDEX_KDTREE=0
indexParams=dict(algo