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中的序列化与反序列化的使用
Jun 30 Python
python动态网页批量爬取
Feb 14 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
解决python flask中config配置管理的问题
Jul 26 Python
Django分页功能的实现代码详解
Jul 29 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
Python3常用内置方法代码实例
Nov 18 Python
python的range和linspace使用详解
Nov 27 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
python 实现IP子网计算
Feb 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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
javascript的事件触发器介绍的实现
2014/06/05 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
基于python的七种经典排序算法(推荐)
2016/12/08 Python
python使用super()出现错误解决办法
2017/08/14 Python
python中scikit-learn机器代码实例
2018/08/05 Python
pandas 层次化索引的实现方法
2019/07/06 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
python利用线程实现多任务
2020/09/18 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
高中班长自我鉴定
2013/12/20 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
运动会报道稿大全
2015/07/23 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python