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 03 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
python批量下载抖音视频
Jun 17 Python
pycharm 安装JPype的教程
Aug 08 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
快速查找Python安装路径方法
Feb 06 Python
pytorch实现MNIST手写体识别
Feb 14 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
pandas求平均数和中位数的方法实例
Aug 04 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/06/13 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
jQuery操作select的实例代码
2012/06/14 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
Python 获取div标签中的文字实例
2018/12/20 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
异常和异常类的概念
2014/09/12 面试题
控制工程专业个人求职信
2013/09/25 职场文书
光盘行动倡议书
2014/02/02 职场文书
周年庆促销方案
2014/03/15 职场文书
学历公证委托书
2014/04/09 职场文书
企业承诺书怎么写
2014/05/24 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
婚宴来宾致辞
2015/07/28 职场文书
网吧员工管理制度
2015/08/05 职场文书
放假通知怎么写
2015/08/18 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
java开发双人五子棋游戏
2022/05/06 Java/Android