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安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
Python 多维List创建的问题小结
Jan 18 Python
简单了解python的一些位运算技巧
Jul 13 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
python opencv通过按键采集图片源码
May 20 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
随时给自己贴的图片加文字的php水印
2007/03/16 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
js实现网页随机验证码
2020/10/19 Javascript
Python中的魔法方法深入理解
2014/07/09 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
Python优先队列实现方法示例
2017/09/21 Python
用Python实现KNN分类算法
2017/12/22 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
django使用admin站点上传图片的实例
2019/07/28 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
jupyter实现重新加载模块
2020/04/16 Python
python批量生成条形码的示例
2020/10/10 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
《临死前的严监生》教学反思
2014/02/13 职场文书
原材料检验岗位职责
2014/03/15 职场文书
保密工作责任书
2014/04/16 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
农村党员干部承诺书
2015/05/04 职场文书
盗窃案辩护词
2015/05/21 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS