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中的反转字符串问题
Oct 24 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
Python any()函数的使用方法
Oct 28 Python
将python安装信息加入注册表的示例
Nov 20 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
Python谱减法语音降噪实例
Dec 18 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
Python socket服务常用操作代码实例
Jun 22 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
Python 用户输入和while循环的操作
May 23 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中OR与|| AND与&amp;&amp;的区别总结
2013/10/26 PHP
PHP设置进度条的方法
2015/07/08 PHP
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
详解Web使用webpack构建前端项目
2017/09/23 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python并行分布式框架Celery详解
2018/10/15 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
职工小家建设活动方案
2014/08/25 职场文书
计算机实训报告范文
2014/11/05 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
格林童话读书笔记
2015/06/30 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android