转载自:http://segmentfault.com/a/1190000003941588

介绍

《Programming Computer Vision with Python》是一本介绍计算机视觉底层基本理论和算法的入门书,通过这本收可以学到有关对象识别、基于内容的图像搜索、光学字符识别、光流法、跟踪、三维重建、立体成像、增强现实、姿态估计、全景创建、图像分割、降噪、图像分组等技术的实现原理。

英文版PDF下载: https://it-ebooks.info/book/836/

中文版介绍:http://book.douban.com/subject/25906843/

Python图像处理

先介绍基本的图像处理,包括图像的读取、转换、缩放、导数计算、画图和保存,这些知识将为后面内容的学习打下基础。
作者选择Python编写例子,并使用一个叫PIL(Python Imaging Library)的第三方图像处理库。这里特别指出的是:PIL库开发不活跃,并且很久没更新了,所以有人基于它fork了另一个分支叫Pillow,Pillow保持与PIL相似的使用接口,解决了许多Bug,并同时兼容Python2和Python3,目前开发状态活跃。接下来的学习笔记本人都将使用Pillow来代替PIL。

安装Pillow

以Ubuntu系统为例:

#安装python开发工具及包管理工具
sudo apt-get install python-dev python-pip #安装一些需要支持的图像格式开发包
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev #安装Pillow图像处理库
sudo pip install pillow  

Pillow一瞥

Pillow主要包含了对各种图像模式、图像格式、颜色、过滤器的数据结构(对象)表示,实现了对图像模式转换、格式转换、过滤器应用、常规图像处理操作、图像数据算术运算、2D画图等功能,以模块、类对外提供。
首先,先了解一下Pillow库使用的一些基本概念:

Bands(图像通道)
图像的通道即图像像素的组成部分,跟Channel应该是同一个概念。比如RGB图像有3个通道分别为红、绿、蓝。二值图像和灰度图像只有1个通道。PNG图像有4个通道分别为R、G、B和alpha。库中提供的很多图像操作都是分别作用于某个通道的数据。

Modes(图像模式)
图像模式定义了像素的类型和位深,Pillow支持以下模式:

  • 1 (1-bit pixels, black and white, stored with one pixel per byte)

  • L (8-bit pixels, black and white)

  • P (8-bit pixels, mapped to any other mode using a color palette)

  • RGB (3x8-bit pixels, true color)

  • RGBA (4x8-bit pixels, true color with transparency mask)

  • CMYK (4x8-bit pixels, color separation)

  • YCbCr (3x8-bit pixels, color video format)

  • LAB (3x8-bit pixels, the Lab color space)

  • HSV (3x8-bit pixels, Hue, Saturation, Value color space)

  • I (32-bit signed integer pixels)

  • F (32-bit floating point pixels)

模块概览
Pillow的功能划分为许多模块,我们简单过一下这些模块的功能,以便在看到作者的示例代码时,可以快速知道这些代码功能在Pillow哪些模块中提供。因为作者使用的PIL库已经过时,我们得用新的Pillow库来重写和改进代码。

  • Image模块
    提供了一个叫Image的类来表示图像,以下提到的PIL图像指的就是此类的对象。Image对象可以使用Image.new、Image.fromarray、Image.frombytes、Image.frombuffer等方法来构造,也可以open一张图片来构造。Image类提供了一些对图像进行简单处理的方法(如:convert、copy、crop、filter、resize、rotate、save、show、transform等)和图像的基本属性/信息。以下代码示例打开一张图片,旋转45度后显示出来:

    from PIL import Image
    im = Image.open("bride.jpg")
    im.rotate(45).show()
  • ImageChops模块
    提供了一些对图像颜色通道的算术运算,Chops为Channel Operations的缩写,这些运算通常是对两幅图像进行的,并返回一幅处理后的图像,大部分操作目前只支持8-bit通道。

  • ImageColor模块
    包含一个颜色表和一个从CSS3表示的颜色到RGB颜色的转换器,主要用于方便构造Image对象,即PIL.Image.new(mode, size, color=0)的color参数支持以下形式:

    • 16进制的颜色表示,如#rgb, #rrggbb

    • rgb函数,如rgb(255,0,0), rgb(100%, 0%, 100%)

    • HSL(色相、饱和、亮度)函数,如hsl(0,100%,100%),色相取值为0到360,饱和度和亮度取值为0%到100%

    • 常规的HTML颜色名字,如red, Red

  • ImageCms模块
    提供对LittleCMS2色彩管理引擎的支持。Little CMS是最流行的开源色彩管理库之一。

  • ImageDraw模块
    提供简单的2D画图功能,比如画点、画线、画矩形、多边形、文本、弧形、椭圆等,支持字体设置。

  • ImageEnhance模块
    提供一些类用于图像增强操作,比如边缘锐化、色彩平衡、对比度和亮度调节等。

  • ImageFile模块
    提供图像文件的打开和保存,另外,还提供了一个Parser类,用于支持对图片边读边解码(比如图片边从网络上下载边解码的情景)。

  • ImageFilter模块
    预定义了一些过滤器,可以在Image.filter(filter)中作为参数使用:

    • BLUR(模糊效果)

    • CONTOUR(轮廓)

    • DETAIL(细节)

    • EDGE_ENHANCE(边缘加强)

    • EDGE_ENHANCE_MORE(边缘加强)

    • EMBOSS(浮雕效果)

    • FIND_EDGES(查找边缘)

    • SMOOTH(使光滑)

    • SMOOTH_MORE(使光滑)

    • SHARPEN(锐化)

  • ImageFont模块
    定义了类ImageFont表示位图字体(点阵字体),字体对象可以作为参数传给ImageDraw.Draw.text(xy, text, fill=None, font=None, anchor=None)以指定的字体画文本。
    PIL使用自有格式存储位图字体,从1.1.4开始,支持TrueType和OpenType字体。

  • ImageGrab模块
    从屏幕截图或从剪贴板获取图像,得到Image对象。目前只支持OSX(在3.0增加)和Windows。

  • ImageMath模块
    只提供了一个函数ImageMath.eval用于对图像表达式(image expressions)进行求值,这些表达式可以是对图像数据每个bit的位运算(&、|、^、~),也可以是内置的一些运算,比如对图像的每个像素求绝对值、转换图像模式、转float或int等。

  • ImageMorph模块
    提供图像形态操作。

  • ImageOp模块
    提供一些可直接使用的图像处理操作,如自动调节对比度、自动裁边等。

  • ImagePalette模块
    提供调色板类,其中的方法都被标记为experimental,文档不详。

  • ImagePath模块
    用于存储和操作2维向量数据。Path对象可传入ImageDraw模块的相关方法。

  • ImageQt模块
    支持从PIL图像对象创建PyQt4或PyQt5的QImage对象,方便被Qt使用和显示。

  • ImageSequence模块
    支持枚举出一个image sequence(图像系统,如fli动画文件)的所有帧。

  • ImageStat模块
    对图像或指定区域的每个通道进行统计,包括count、sum、min/max等。

  • ImageTk模块
    支持从PIL图像对象创建Tkinter(Python的GUI库)的BitmapImage和PhotoImage对象。

  • ImageWin模块
    支持在Windows平台上创建和显示图像,可与PythonWin和其它UI库一起使用,为这些工具库提供Windows设备上下文或windows句柄的访问。

最后给出一个简单的示例,把书的彩色封面图像转为灰度图像并显示出来:

from PIL import Image
pil_im = Image.open('cover.png').convert('L')
pil_im.show()

效果如下:

小结

下一个笔记将介绍另外几个图像处理相关的库。

Programming Computer Vision with Python (学习笔记一)相关推荐

  1. Programming Computer Vision with Python【学习笔记】【第一章】

    第1章 基本的图像操作和处理 1.1 PIL:Python图像处理类库 1.1.1 转换图像格式--save()函数 1.1.2 创建缩略图 1.1.3 复制并粘贴图像区域 1.1.4 调整尺寸和旋转 ...

  2. Programming Computer Vision with Python (学习笔记四)

    上一个笔记主要是讲了PCA的原理,并给出了二维图像降一维的示例代码.但还遗留了以下几个问题: 在计算协方差和特征向量的方法上,书上使用的是一种被作者称为compact trick的技巧,以及奇异值分解 ...

  3. Programming Computer Vision with Python (学习笔记十二)

    ORB(Oriented FAST and Rotated BRIEF)可用来替代SIFT(或SURF),它对图像更具有抗噪特性,是一种特征检测高效算法,其速度满足实时要求,可用于增强图像匹配应用. ...

  4. Programming Computer Vision with Python (学习笔记十一)

    尺度不变特征变换(Scale-invariant feature transform, 简称SIFT)是图像局部特征提取的现代方法--基于区域/图像块的分析.在上篇笔记里我们使用的图像之间对应点的匹配 ...

  5. Programming Computer Vision with Python (学习笔记九)

    角检测(Corner detection)是指检测图像中具有代表性的(我们感兴趣的)角点,一般讲为形状或边缘的拐角处,这些点可以大略标记对象在图像中的轮廓和位置,如果从一个图像序列中检测每个图像的角点 ...

  6. Programming Computer Vision with Python (学习笔记八)

    图像去噪(Image Denoising)的过程就是将噪点从图像中去除的同时尽可能的保留原图像的细节和结构.这里讲的去噪跟前面笔记提过的去噪不一样,这里是指高级去噪技术,前面提过的高斯平滑也能去噪,但 ...

  7. Programming Computer Vision with Python (学习笔记七)

    数学形态学(mathematical morphology)关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状.起初是基于二值图像提出的,后来扩展到灰度图像.二值图像就是:每个像素的值只能是 ...

  8. Programming Computer Vision with Python (学习笔记五)

    SciPy库 SciPy库,与之前我们使用的NumPy和Matplotlib,都是scipy.org提供的用于科学计算方面的核心库.相对NumPy,SciPy库提供了面向更高层应用的算法和函数(其实也 ...

  9. Programming Computer Vision with Python (学习笔记二)

    首先介绍跟图像处理.显示有关两个库:NumPy和Matplotlib,然后介绍增强图像对比度的实现原理. NumPy NumPy是Python用于科学计算的基础库,提供了一些很有用的概念,如:N维数组 ...

最新文章

  1. Spark2.2.0分布式集群安装(StandAlone模式)
  2. 012_SpringBoot视图层技术thymeleaf-条件判断
  3. Linux权限中的大写s,Linux文件权限、用户、组、文本实操二
  4. JVM 调优实战--常用命令参数及PS收集器的GC日志格式
  5. matlab转换成vc,如何将matlab65函数转换成vc++60动态链接库.doc
  6. wxml报错原因_C#生成、解析xml文件以及处理报错原因
  7. binary search(二分法)
  8. 英语发音表及读法_用英语给孩子讲绘本:果酱英语的Good Morning
  9. FreeMarker笔记 第二章 数值和类型
  10. Windows Azure Cloud Service (42) 使用Azure In-Role Cache缓存(1)Co-located Role
  11. 论文中的三线表绘制(word)
  12. 计算机打印机驱动f4200,惠普HP Deskjet F4238 多功能一体机驱动惠普HP Deskjet F4238 多功能一体机驱动...
  13. VB.net单exe文件内MP3和WAV音乐文件播放
  14. PS:动图加文字(二)
  15. 微信小程序开发BUG经验总结
  16. 计算机基础知识与Java语言概述(DAY1)
  17. 《 2021大学生就业分析报告 》
  18. 《大型网站技术架构》——第一章 大型网站架构演化
  19. 用Python实现Word多文档合并
  20. 虚拟机中linux磁盘空间不足

热门文章

  1. 微服务架构的核心要点和实现原理
  2. 中小型研发团队架构实践:微服务架构
  3. spring security源码分析心得
  4. spring mvc DispatcherServlet详解之一---处理请求深入解析(续)
  5. 【大数据-Hadoop】Spark
  6. 细讲 | Attention Is All You Need
  7. OpenStack行业实践和发展趋势
  8. 计网 - 一台内存在 8G 左右的服务器,可以同时维护多少个连接?
  9. 深入理解分布式技术 - 负载均衡策略
  10. 深入理解分布式技术 - Kafka 高性能原理剖析