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如何获取列表(List)的中位数
Aug 12 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
windows下python和pip安装教程
May 25 Python
Django rest framework工具包简单用法示例
Jul 20 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
opencv与numpy的图像基本操作
Mar 08 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
python实现滑雪者小游戏
Feb 22 Python
pandas dataframe 中的explode函数用法详解
May 18 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中static,const与define的使用区别
2013/06/18 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
Python Web版语音合成实例详解
2019/07/16 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Pyqt5自适应布局实例
2019/12/13 Python
欧克利英国官网:Oakley英国
2019/08/24 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
公司委托书格式范文
2014/04/04 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
研修心得体会
2014/09/04 职场文书
户籍证明书标准模板
2014/09/10 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang