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处理csv数据的方法
Mar 11 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
python简单验证码识别的实现方法
May 10 Python
python实现大文本文件分割
Jul 22 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
python简单的三元一次方程求解实例
Apr 02 Python
django实现后台显示媒体文件
Apr 07 Python
pandas DataFrame运算的实现
Jun 14 Python
python实现图像外边界跟踪操作
Jul 13 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
May 13 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教程 基本语法
2009/10/23 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Vue基础配置讲解
2019/11/29 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
django文档学习之applications使用详解
2018/01/29 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
详解python中的hashlib模块的使用
2019/04/22 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
利用python绘制正态分布曲线
2021/01/04 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
手工社团活动方案
2014/02/17 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
心理健康活动总结
2014/04/30 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
清明节寄语2015
2015/03/23 职场文书
安全生产协议书
2016/03/22 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server