SURF匹配python实现

# -*- coding: utf-8 -*-
"""
Created on Thu Jun 20 16:25:27 2019
推荐使用OPENCV 3.1.0及以下版本
两幅png为middlebury上面的示例图片
@author: zhangzhicheng
"""

import numpy as np
import cv2
from matplotlib import pyplot as plt
leftImage = cv2.imread('E:\\stereovisioncoding\\SemiGlobalMathingImplementationmatlab\\image_left.png')
rightImage = cv2.imread('E:\\stereovisioncoding\\SemiGlobalMathingImplementationmatlab\\image_right.png')

#创造sift
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(leftImage, None)
kp2, des2 = sift.detectAndCompute(rightImage, None)#返回关键点信息和描述符

 
FLANN_INDEX_KDTREE = 0
indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees = 5)
searchParams = dict(checks = 50)#指定索引树要被遍历的次数

flann = cv2.FlannBasedMatcher(indexParams, searchParams)
matches = flann.knnMatch(des1, des2, k=2)
matchesMask = [[0,0] for i in range(len(matches))]
print("matches", matches[0])
for i, (m,n) in enumerate (matches):
    if m.distance < 0.07*n.distance:
        matchesMask[i] = [1,0]

drawParams = dict(matchColor = (0, 255, 0), singlePointColor=None,
                  matchesMask = matchesMask, flags = 2)#flag=2只画出匹配点,flag=0把所有的点都画出
resultImage = cv2.drawMatchesKnn(leftImage,kp1,rightImage,kp2,matches,None,**drawParams)
plt.imshow(resultImage)
plt.show()

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值