Python中利用Scipy包的SIFT方法进行图片识别的实例教程


Posted in Python onJune 03, 2016

scipy
scipy包包含致力于科学计算中常见问题的各个工具箱。它的不同子模块相应于不同的应用。像插值,积分,优化,图像处理,,特殊函数等等。
scipy可以与其它标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库),或者Matlab工具箱。scipy是Python中科学计算程序的核心包;它用于有效地计算numpy矩阵,来让numpy和scipy协同工作。
在实现一个程序之前,值得检查下所需的数据处理方式是否已经在scipy中存在了。作为非专业程序员,科学家总是喜欢重新发明造轮子,导致了充满漏洞的,未经优化的,很难分享和维护的代码。相反,Scipy程序经过优化和测试,因此应该尽可能使用。
scipy由一些特定功能的子模块组成,它们全依赖numpy,但是每个之间基本独立。
举个Debian系的Linux中安装的例子(虽然我在windows上用--):

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

导入Numpy和这些scipy模块的标准方式是:
import numpy as np
from scipy import stats # 其它子模块相同

主scipy命名空间大多包含真正的numpy函数(尝试 scipy.cos 就是 np.cos)。这些仅仅是由于历史原因,通常没有理由在你的代码中使用import scipy。

使用图像匹配SIFT算法进行LOGO检测
先上效果图:

Python中利用Scipy包的SIFT方法进行图片识别的实例教程

其中Python中利用Scipy包的SIFT方法进行图片识别的实例教程是logo标识,

Python中利用Scipy包的SIFT方法进行图片识别的实例教程

代码如下.

#coding=utf-8 
import cv2 
import scipy as sp 
 
img1 = cv2.imread('x1.jpg',0) # queryImage 
img2 = cv2.imread('x2.jpg',0) # trainImage 
 
# Initiate SIFT detector 
sift = cv2.SIFT() 
 
# find the keypoints and descriptors with SIFT 
kp1, des1 = sift.detectAndCompute(img1,None) 
kp2, des2 = sift.detectAndCompute(img2,None) 
 
# FLANN parameters 
FLANN_INDEX_KDTREE = 0 
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) 
search_params = dict(checks=50)  # or pass empty dictionary 
flann = cv2.FlannBasedMatcher(index_params,search_params) 
matches = flann.knnMatch(des1,des2,k=2) 
 
print 'matches...',len(matches) 
# Apply ratio test 
good = [] 
for m,n in matches: 
  if m.distance < 0.75*n.distance: 
    good.append(m) 
print 'good',len(good) 
# ##################################### 
# visualization 
h1, w1 = img1.shape[:2] 
h2, w2 = img2.shape[:2] 
view = sp.zeros((max(h1, h2), w1 + w2, 3), sp.uint8) 
view[:h1, :w1, 0] = img1 
view[:h2, w1:, 0] = img2 
view[:, :, 1] = view[:, :, 0] 
view[:, :, 2] = view[:, :, 0] 
 
for m in good: 
  # draw the keypoints 
  # print m.queryIdx, m.trainIdx, m.distance 
  color = tuple([sp.random.randint(0, 255) for _ in xrange(3)]) 
  #print 'kp1,kp2',kp1,kp2 
  cv2.line(view, (int(kp1[m.queryIdx].pt[0]), int(kp1[m.queryIdx].pt[1])) , (int(kp2[m.trainIdx].pt[0] + w1), int(kp2[m.trainIdx].pt[1])), color) 
 
cv2.imshow("view", view) 
cv2.waitKey()
Python 相关文章推荐
为python设置socket代理的方法
Jan 14 Python
Python迭代器和生成器介绍
Mar 06 Python
对于Python装饰器使用的一些建议
Jun 03 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
python实现与redis交互操作详解
Apr 21 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
Python将字典转换为XML的方法
Aug 01 Python
基于PyTorch中view的用法说明
Mar 03 Python
Python 如何解决稀疏矩阵运算
May 26 Python
Python中的descriptor描述器简明使用指南
Jun 02 #Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 #Python
深入理解Python变量与常量
Jun 02 #Python
Python中的Descriptor描述符学习教程
Jun 02 #Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 #Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 #Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 #Python
You might like
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python实现大学人员管理系统
2019/10/25 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
个人投资计划书
2014/05/01 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
上诉答辩状范文
2015/05/22 职场文书
反邪教观后感
2015/06/11 职场文书
小学数学教师研修日志
2015/11/13 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
Python学习之包与模块详解
2022/03/19 Python
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android