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中字典的键的使用
Aug 19 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
对python sklearn one-hot编码详解
Jul 10 Python
Python中 map()函数的用法详解
Jul 10 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
Python一键安装全部依赖包的方法
Aug 12 Python
深入了解python中元类的相关知识
Aug 29 Python
python 回溯法模板详解
Feb 26 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
Python标准库之typing的用法(类型标注)
Jun 02 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 正则匹配函数体
2009/08/25 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
Python中使用中文的方法
2011/02/19 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
python编写计算器功能
2019/10/25 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
8种常用的Python工具
2020/08/05 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
公务员培的训心得体会
2014/09/01 职场文书
自主招生自荐信格式
2015/03/04 职场文书
2015年售票员工作总结
2015/04/29 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
幼儿园见习总结
2015/06/23 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书