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开发编码规范
Sep 08 Python
python分割文件的常用方法
Nov 01 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
python文件操作相关知识点总结整理
Feb 22 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
Python OpenCV实现视频分帧
Jun 01 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
用python批量移动文件
Jan 14 Python
利用python实现汉诺塔游戏
Mar 01 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下实现折线图效果的代码
2007/04/28 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
Python中字典的基本知识初步介绍
2015/05/21 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
python groupby 函数 as_index详解
2019/12/16 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
社团招新策划书
2014/02/04 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
职称评定自我鉴定
2014/03/18 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
会员活动策划方案
2014/08/19 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
六查六看六改心得体会
2014/10/14 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
评先进个人材料
2014/12/29 职场文书
工作后的感想
2015/08/07 职场文书