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 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
简单的Python2.7编程初学经验总结
Apr 01 Python
python妹子图简单爬虫实例
Jul 07 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
python实现定时发送qq消息
Jan 18 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python3 pillow模块实现简单验证码
Oct 31 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
Python return语句如何实现结果返回调用
Oct 15 Python
基于Python爬取素材网站音频文件
Oct 21 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 Socket 编程
2010/04/09 PHP
组合算法的PHP解答方法
2012/02/04 PHP
php中filter_input函数用法分析
2014/11/15 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python输入二维数组方法
2018/04/13 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
运动会通讯稿500字
2014/02/20 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
车间班组长竞聘书
2015/09/15 职场文书