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实现简单的相似图片搜索的教程
Apr 23 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
Python变量访问权限控制详解
Jun 29 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
Python模块的制作方法实例分析
Dec 21 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Python代码需要缩进吗
Jul 01 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
python对文档中元素删除,替换操作
Apr 02 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生成缩略图的类代码
2008/10/02 PHP
php 删除数组元素
2009/01/16 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
django model去掉unique_together报错的解决方案
2016/10/18 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Django之路由层的实现
2019/09/09 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
python pymysql库的常用操作
2020/10/16 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
材料成型及控制工程专业求职信
2014/06/19 职场文书
个人主要事迹材料
2014/08/26 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
小学教师求职信范文
2015/03/20 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
Log4j.properties配置及其使用
2021/08/02 Java/Android
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers