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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
浅谈Python中的数据类型
May 05 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python 基础教程之包和类的用法
Feb 23 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python中Numpy ndarray的使用详解
May 24 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
python基础详解之if循环语句
Apr 24 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延迟静态绑定实例分析
2015/02/08 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
分享一个asp.net pager分页控件
2012/01/04 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
javascript 回调函数详解
2014/11/11 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
出生医学证明样本
2014/01/17 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
温馨提示标语
2014/06/26 职场文书
违纪开除通知书
2015/04/25 职场文书
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android