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通过zlib实现压缩与解压字符串的方法
Nov 19 Python
Python with用法实例
Apr 14 Python
Python实现合并字典的方法
Jul 07 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
解决jupyter notebook 出现In[*]的问题
Apr 13 Python
PyQt5实现画布小程序
May 30 Python
关于python中导入文件到list的问题
Oct 31 Python
python中re模块知识点总结
Jan 17 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中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
window.onload使用指南
2015/09/13 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
python入门基础之用户输入与模块初认识
2016/11/14 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
python画折线图的程序
2018/07/26 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
驾驶员培训方案
2014/05/01 职场文书
活动总结范文
2014/08/30 职场文书
团代会闭幕词
2015/01/28 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
人民的好儿女观后感
2015/06/18 职场文书