博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python opencv特征匹配
阅读量:3897 次
发布时间:2019-05-23

本文共 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/

你可能感兴趣的文章
生活之工资条(薪资结构参考)
查看>>
Makefile之通用模板
查看>>
Makefile之常用函数介绍
查看>>
Makefile之自动变量介绍
查看>>
C++之位测试练习的相关代码
查看>>
C++之IPC测试单元
查看>>
C++之测试snmp的注册模块
查看>>
WebKit之WebSocket的初步源码分析2
查看>>
WebKit之Canvas的源码初步分析1
查看>>
WebKit之Canvas源码分析2
查看>>
WebKit之CSSValue的继承关系
查看>>
WebKit之ScriptWrapper继承关系图
查看>>
Perl之默认变量
查看>>
Linux之ARM/Linux与单片机开发差异
查看>>
Linux之内存泄露的检测工具
查看>>
URL之开源项目的在线网址
查看>>
工具之OpenGrok的搭建方法
查看>>
Android之NDK搭建
查看>>
qt之VS2008编译
查看>>
Python之自动生成代码继承关系
查看>>