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中的lstrip()方法使用简介
May 19 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
python生成式的send()方法(详解)
May 08 Python
python中的协程深入理解
Jun 10 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
Jun 04 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
用Python将库打包发布到pypi
Apr 13 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 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数组中删除元素之重新索引的方法
2014/09/16 PHP
php实现httpRequest的方法
2015/03/13 PHP
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
使用Python对Access读写操作
2017/03/30 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
pytorch构建多模型实例
2020/01/15 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
中职毕业生自我鉴定
2014/09/13 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
计划生育工作汇报
2014/10/28 职场文书
2015年中个人总结范文
2015/03/10 职场文书
上学路上观后感
2015/06/16 职场文书
孙振耀退休感言
2015/08/01 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers