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实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
python 字典(dict)按键和值排序
Jun 28 Python
python中import学习备忘笔记
Jan 24 Python
Python中表示字符串的三种方法
Sep 06 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
学python需要去培训机构吗
Jul 01 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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 购物车的例子
2009/05/04 PHP
PHP 字符串 小常识
2009/06/05 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
CURL状态码列表(详细)
2013/06/27 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
javascript插入样式实现代码
2012/02/22 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
Python configparser模块常用方法解析
2020/05/22 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
Pandas之缺失数据的实现
2021/01/06 Python
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
Ejb技术面试题
2015/04/29 面试题
教师师德师风个人整改方案
2014/09/18 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
运输公司工作总结
2015/08/11 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android
MySQL GTID复制的具体使用
2022/05/20 MySQL
css弧边选项卡的项目实践
2023/05/07 HTML / CSS