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根据出生日期获得年龄的方法
Mar 31 Python
Python多线程编程(四):使用Lock互斥锁
Apr 05 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
linux安装python修改默认python版本方法
Mar 31 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 20 Python
python中24小时制转换为12小时制的方法
Jun 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验证码类实例分享
2013/12/27 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
Javascript - HTML的request类
2006/07/15 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
Python subprocess模块学习总结
2014/03/13 Python
Python和php通信乱码问题解决方法
2014/04/15 Python
python调用百度REST API实现语音识别
2018/08/30 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
python实现密码强度校验
2020/03/18 Python
在python image 中实现安装中文字体
2020/05/16 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
学雷锋志愿者活动总结
2014/06/27 职场文书
公司活动总结范文
2014/07/01 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
暑期家教宣传单
2015/07/14 职场文书
创业计划书之书店
2019/09/10 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
Python实现位图分割的效果
2021/11/20 Python