python knnmatch_python用FlannBasedMatcher方法进行特征点匹配

小结:

1)FlannBasedMatcher 寻找最近邻近似匹配 结果还是比较满意的

2)coff控制有效匹配数量

代码如下:

import numpy as np

import cv2 as cv

from matplotlib import pyplot as plt

imageA = cv.imread('c:\\meilihaian.jpg')

imageB = cv.imread('c:\\meilihaian1.jpg')

grayA = cv.cvtColor(imageA, cv.COLOR_BGR2GRAY)

cv.imshow("grayA", grayA)

grayB = cv.cvtColor(imageB, cv.COLOR_BGR2GRAY)

cv.imshow("grayB", grayB)

min_hessian = 1000

sift = cv.xfeatures2d.SIFT_create(min_hessian)

keypointsA, featuresA = sift.detectAndCompute(grayA,None)

keypointsB, featuresB = sift.detectAndCompute(grayB,None)

kpImgA=cv.drawKeypoints(grayA,keypointsA,imageA)

kpImgB=cv.drawKeypoints(grayB,keypointsB,imageB)

cv.imshow("kpImgA", kpImgA)

cv.imshow("kpImgB", kpImgB)

FLANN_INDEX_KDTREE = 0

index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)

search_params = dict(checks=50)

# 使用FlannBasedMatcher 寻找最近邻近似匹配

flann = cv.FlannBasedMatcher(index_params,search_params)

# 使用knnMatch匹配处理,并返回匹配matches

matches = flann.knnMatch(featuresA, featuresB, k=2)

matchesMask = [[0,0] for i in range(len(matches))]

coff = 0.2 # 0.1 0.7  0.8

for i,(m,n) in enumerate(matches):

if m.distance < coff * n.distance:

matchesMask[i]=[1,0]

draw_params = dict(matchColor = (0,255,0),

singlePointColor = (255,0,0),

matchesMask = matchesMask,

flags = 0)

resultImg = cv.drawMatchesKnn(grayA, keypointsA, grayB,keypointsB, matches,None,**draw_params)

resultImg1 = cv.drawMatchesKnn(imageA, keypointsA, imageB,keypointsB, matches,None,**draw_params)

plt.imshow(resultImg,),plt.show()

cv.imshow("resultImg", resultImg)

cv.imshow("resultImg1", resultImg1)

cv.waitKey(0)

cv.destroyAllWindows()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值