基于OpenCV的Sift特征匹配(在drawMatchesKnn函数无法调用的情况下)

本实验基于opencv内置sift算子来对相似图像进行特征匹配。而在图像匹配显示中,由于莫名原因 “drawMatchesKnn” 函数无法直接调用。于是后面的图像显示部分是根据自己理解实现的。而在这个过程中也对匹配器中的匹配器对象(DMatch)多了一些了解。

DMatch对象具有下列属性:DMatch.distance 描述符之间的距离;DMatch.queryIdx 主影像的描述符索引;DMatch.trainIdx 第二影像的描述符索引;DMatch.imgIdx 目标影像的索引,也就是当有多个辅影像时的编号。而kp1和kp2是主影像和辅影像的关键点列表,存储了关键点的坐标信息(pt)。了解了这一层关系,我们就可以顺利地索引到关键点点坐标,从而画出特征匹配的情况。此外,我们还需要将原来分开的两张影像进行拼接处理,以便显示,在本代码中,拼接方法通过自定义函数“appendimages”实现。下面贴出完整代码。

import cv2
from pylab import *
img1=cv2.imread('ukbench00641.jpg',0)
img2=cv2.imread('ukbench00642.jpg',0)
m_h,n_l=img1.shape
sift=cv2.SIFT()
kp1,des1=sift.detectAndCompute(img1,None)
kp2,des2=sift.detectAndCompute(img2,None)
bf=cv2.BFMatcher()
matches=bf.knnMatch(des1,des2,k=2)
good=[]
for m,n in matches:
    if m.distance<0.75*n.distance:
     
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值