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 相关文章推荐
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
python中文乱码不着急,先看懂字节和字符
Dec 20 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
Python编程深度学习计算库之numpy
Dec 28 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
详解Python设计模式之策略模式
Jun 15 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 时间转换Unix时间戳代码
2010/01/22 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php实现点击可刷新验证码
2015/11/07 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
js实现交换运动效果的方法
2015/04/10 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
浅谈python中的变量默认是什么类型
2016/09/11 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
用Django写天气预报查询网站
2018/10/21 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
Python 变量的创建过程详解
2019/09/02 Python
Python实现搜索算法的实例代码
2020/01/02 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
python读取mysql数据绘制条形图
2020/03/25 Python
解决c++调用python中文乱码问题
2020/07/29 Python
六道php面试题附答案
2014/06/05 面试题
大学生自我鉴定
2013/12/16 职场文书
社团文化节邀请函
2014/01/10 职场文书
初中家长寄语
2014/04/02 职场文书
法律专业自荐信
2014/06/03 职场文书
医院保洁服务方案
2014/06/11 职场文书
2014年质检工作总结
2014/11/26 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书