opencv-python 提取sift特征并匹配的实例


Posted in Python onDecember 09, 2019

我就废话不多说,直接上代码吧!

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from find_obj import filter_matches,explore_match
from matplotlib import pyplot as plt
 
def getSift():
  '''
  得到并查看sift特征
  '''
  img_path1 = '../../data/home.jpg'
  #读取图像
  img = cv2.imread(img_path1)
  #转换为灰度图
  gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  #创建sift的类
  sift = cv2.SIFT()
  #在图像中找到关键点 也可以一步计算#kp, des = sift.detectAndCompute
  kp = sift.detect(gray,None)
  print type(kp),type(kp[0])
  #Keypoint数据类型分析 http://www.cnblogs.com/cj695/p/4041399.html
  print kp[0].pt
  #计算每个点的sift
  des = sift.compute(gray,kp)
  print type(kp),type(des)
  #des[0]为关键点的list,des[1]为特征向量的矩阵
  print type(des[0]), type(des[1])
  print des[0],des[1]
  #可以看出共有885个sift特征,每个特征为128维
  print des[1].shape
  #在灰度图中画出这些点
  img=cv2.drawKeypoints(gray,kp)
  #cv2.imwrite('sift_keypoints.jpg',img)
  plt.imshow(img),plt.show()
 
def matchSift():
  '''
  匹配sift特征
  '''
  img1 = cv2.imread('../../data/box.png', 0) # queryImage
  img2 = cv2.imread('../../data/box_in_scene.png', 0) # trainImage
  sift = cv2.SIFT()
  kp1, des1 = sift.detectAndCompute(img1, None)
  kp2, des2 = sift.detectAndCompute(img2, None)
  # 蛮力匹配算法,有两个参数,距离度量(L2(default),L1),是否交叉匹配(默认false)
  bf = cv2.BFMatcher()
  #返回k个最佳匹配
  matches = bf.knnMatch(des1, des2, k=2)
  # cv2.drawMatchesKnn expects list of lists as matches.
  #opencv2.4.13没有drawMatchesKnn函数,需要将opencv2.4.13\sources\samples\python2下的common.py和find_obj文件放入当前目录,并导入
  p1, p2, kp_pairs = filter_matches(kp1, kp2, matches)
  explore_match('find_obj', img1, img2, kp_pairs) # cv2 shows image
  cv2.waitKey()
  cv2.destroyAllWindows()
 
def matchSift3():
  '''
  匹配sift特征
  '''
  img1 = cv2.imread('../../data/box.png', 0) # queryImage
  img2 = cv2.imread('../../data/box_in_scene.png', 0) # trainImage
  sift = cv2.SIFT()
  kp1, des1 = sift.detectAndCompute(img1, None)
  kp2, des2 = sift.detectAndCompute(img2, None)
  # 蛮力匹配算法,有两个参数,距离度量(L2(default),L1),是否交叉匹配(默认false)
  bf = cv2.BFMatcher()
  #返回k个最佳匹配
  matches = bf.knnMatch(des1, des2, k=2)
  # cv2.drawMatchesKnn expects list of lists as matches.
  #opencv3.0有drawMatchesKnn函数
  # Apply ratio test
  # 比值测试,首先获取与A 距离最近的点B(最近)和C(次近),只有当B/C
  # 小于阈值时(0.75)才被认为是匹配,因为假设匹配是一一对应的,真正的匹配的理想距离为0
  good = []
  for m, n in matches:
    if m.distance < 0.75 * n.distance:
      good.append([m])
  img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good[:10], None, flags=2)
  cv2.drawm
  plt.imshow(img3), plt.show()
 
matchSift()

以上这篇opencv-python 提取sift特征并匹配的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python抓取京东图书评论数据
Aug 31 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
python处理document文档保留原样式
Sep 23 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
python 多维高斯分布数据生成方式
Dec 09 #Python
使用python模拟高斯分布例子
Dec 09 #Python
使用python+whoosh实现全文检索
Dec 09 #Python
Python 实现顺序高斯消元法示例
Dec 09 #Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 #Python
在python中做正态性检验示例
Dec 09 #Python
python实现高斯判别分析算法的例子
Dec 09 #Python
You might like
php生成文件
2007/01/15 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
JavaScript 参考教程
2006/12/29 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
flask中过滤器的使用详解
2018/08/01 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
python如何进入交互模式
2020/07/06 Python
利用python 读写csv文件
2020/09/10 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
连锁经营管理专业大学生求职信
2013/10/30 职场文书
医院实习接收函
2014/01/12 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
部队2014年终工作总结
2014/11/27 职场文书
革命电影观后感
2015/06/18 职场文书
小学生暑假安全公约
2015/07/14 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript