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定时器(Timer)用法简单实例
Jun 04 Python
Python随机数random模块使用指南
Sep 09 Python
Python中str.format()详解
Mar 12 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
使用python动态生成波形曲线的实现
Dec 04 Python
keras打印loss对权重的导数方式
Jun 10 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
浅析Python中的套接字编程
Jun 22 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数据库调用类调用实例(详细注释)
2012/07/12 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
实例讲解python函数式编程
2014/06/09 Python
Php多进程实现代码
2018/05/07 Python
python3中的md5加密实例
2018/05/29 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
利用python计算时间差(返回天数)
2019/09/07 Python
遇到的Mysql的面试题
2014/06/29 面试题
社团招新策划书
2014/02/04 职场文书
大学生活动策划方案
2014/02/10 职场文书
建设工地安全标语
2014/06/07 职场文书
医学检验专业自荐信
2014/09/18 职场文书
同学聚会邀请函
2015/01/30 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫