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 中的列表解析和生成表达式
Mar 10 Python
python生成IP段的方法
Jul 07 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
python+mysql实现学生信息查询系统
Feb 21 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
基于python生成器封装的协程类
Mar 20 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
Python高级property属性用法实例分析
Nov 19 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 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
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
javascript 闭包
2011/09/15 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
详解python eval函数的妙用
2017/11/16 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
老总助理工作岗位职责
2014/02/06 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
农业项目合作意向书
2015/05/08 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
python自动化八大定位元素讲解
2021/07/09 Python