Programming Computer Vision with Python (学习笔记一)
轉載自: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 pillowPillow一瞥
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模塊
from PIL import Image im = Image.open("bride.jpg") im.rotate(45).show()
提供了一個叫Image的類來表示圖像,以下提到的PIL圖像指的就是此類的對象。Image對象可以使用Image.new、Image.fromarray、Image.frombytes、Image.frombuffer等方法來構造,也可以open一張圖片來構造。Image類提供了一些對圖像進行簡單處理的方法(如:convert、copy、crop、filter、resize、rotate、save、show、transform等)和圖像的基本屬性/信息。以下代碼示例打開一張圖片,旋轉45度后顯示出來: -
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 (学习笔记一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 入门建议
- 下一篇: Programming Computer