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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
详解Python的单元测试
Apr 28 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python探索之创建二叉树
Oct 25 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Python接口开发实现步骤详解
Apr 26 Python
Python使用pdb调试代码的技巧
May 03 Python
python打包生成so文件的实现
Oct 30 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
php5 and xml示例
2006/11/22 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
微信小程序使用Socket的实例
2017/09/19 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
python妹子图简单爬虫实例
2015/07/07 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
浅析Python 责任链设计模式
2020/09/11 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
医院护士的求职信范文
2013/12/26 职场文书
驾驶员培训方案
2014/05/01 职场文书
爱与责任演讲稿
2014/05/20 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
求职信格式范文
2015/03/19 职场文书