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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
如何通过Python实现标签云算法
Jul 02 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
python实现KNN分类算法
Oct 16 Python
python实现画出e指数函数的图像
Nov 21 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
Python爬虫requests库多种用法实例
May 28 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
python 统计代码耗时的几种方法分享
Apr 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
JAVA/JSP学习系列之四
2006/10/09 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
浅谈React之状态(State)
2018/09/19 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
Python群发邮件实例代码
2014/01/03 Python
Python中input和raw_input的一点区别
2014/10/21 Python
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
基于Python实现粒子滤波效果
2020/12/01 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
PHP经典面试题
2016/09/03 面试题
仓管员岗位责任制
2014/02/19 职场文书
新年爱情寄语
2014/04/08 职场文书
消防安全宣传标语
2014/06/07 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
2014年话务员工作总结
2014/11/19 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
解决MySQL报“too many connections“错误
2022/04/19 MySQL