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中随机函数random用法实例
Apr 30 Python
浅析Python中的for 循环
Jun 09 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
Python实现发送QQ邮件的封装
Jul 14 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
python如何保证输入键入数字的方法
Aug 23 Python
如何基于Python实现数字类型转换
Feb 07 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
Python jiaba库的使用详解
Nov 23 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
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
工业学校毕业生自荐书
2014/01/03 职场文书
1000字打架检讨书
2014/11/03 职场文书
2014年协会工作总结
2014/11/22 职场文书
办公室个人总结
2015/02/28 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫
Python 图片添加美颜效果
2022/04/28 Python
Python可视化神器pyecharts绘制水球图
2022/07/07 Python