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中利用原始套接字进行网络编程的示例
May 04 Python
python机器学习库常用汇总
Nov 15 Python
django输出html内容的实例
May 27 Python
python实现俄罗斯方块游戏
Mar 25 Python
python进行两个表格对比的方法
Jun 27 Python
opencv与numpy的图像基本操作
Mar 08 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
python读写csv文件方法详细总结
Jul 05 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
python logging通过json文件配置的步骤
2020/04/27 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
什么是唯一索引
2015/07/05 面试题
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
Python各协议下socket黏包问题原理
2022/04/12 Python