您的位置:首頁(yè) > 軟件教程 > 教程 > python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

來(lái)源:好特整理 | 時(shí)間:2024-05-18 15:46:13 | 閱讀:188 |  標(biāo)簽: T Pi 計(jì)算機(jī) 視覺(jué) Python   | 分享到:

如果需要處理的原圖及代碼,請(qǐng)移步小編的GitHub地址 傳送門:請(qǐng)點(diǎn)擊我 如果點(diǎn)擊有誤:https://github.com/LeBron-Jian/ComputerVisionPractice 這個(gè)是之前的筆記,自己看到了就順帶發(fā)出來(lái),也是溫習(xí)一下,內(nèi)容可能不太全,算是入門貼吧。 前言:PIL 圖

如果需要處理的原圖及代碼,請(qǐng)移步小編的GitHub地址

傳送門: 請(qǐng)點(diǎn)擊我

如果點(diǎn)擊有誤:https://github.com/LeBron-Jian/ComputerVisionPractice

這個(gè)是之前的筆記,自己看到了就順帶發(fā)出來(lái),也是溫習(xí)一下,內(nèi)容可能不太全,算是入門貼吧。

前言:PIL

圖像處理是計(jì)算機(jī)視覺(jué)領(lǐng)域中不可或缺的一部分,而PIL(Python Imaging Library)庫(kù)和OpenCV(Open Source Computer Vision Library)是兩個(gè)常用的工具。今天這里主要學(xué)習(xí)以下PIL庫(kù),PIL 是一個(gè)用于圖像處理的 Python 庫(kù),提供了豐富的圖像處理功能。它包含了處理圖像的各種工具和算法,可以進(jìn)行圖像的打開(kāi)、保存、剪裁、旋轉(zhuǎn)、縮放等操作。

PIL(Python Imaging Library)和 OpenCV 都是用于圖像處理的強(qiáng)大庫(kù),它們各自有著不同的優(yōu)勢(shì)和適用場(chǎng)景。以下是一些導(dǎo)致 PIL 仍然被使用的原因:

1,PIL的優(yōu)點(diǎn)

  1. 文字和繪圖功能:PIL允許在圖像上添加文字、繪制幾何圖形和繪制曲線,這對(duì)于圖像注釋和標(biāo)記非常有幫助。
  2. 擴(kuò)展功能:PIL還支持各種擴(kuò)展功能,如圖像濾波、直方圖均衡化和顏色空間轉(zhuǎn)換等。

2,PIL 的缺點(diǎn)

3,PIL 庫(kù)和OpenCV的區(qū)別

  1. 編程語(yǔ)言:PIL庫(kù)是用純Python編寫的,而OpenCV主要是用C++編寫的,并提供了Python的接口。如果您更熟悉Python,并且希望使用Python進(jìn)行圖像處理,那么PIL可能更適合您。并且PIL 的接口相對(duì)較為簡(jiǎn)單,特別適合一些簡(jiǎn)單的圖像處理任務(wù)。對(duì)于一些不需要太多高級(jí)功能的應(yīng)用,PIL 提供了直觀的方法和易于使用的 API。
  2. 功能和算法:OpenCV提供了更豐富和先進(jìn)的圖像處理算法和函數(shù),涵蓋了從基本操作到高級(jí)計(jì)算機(jī)視覺(jué)任務(wù)的各個(gè)方面。而PIL 在功能上相對(duì)輕量,適合一些小型項(xiàng)目或者只需要進(jìn)行基本圖像處理的場(chǎng)景。如果你的需求主要是一些簡(jiǎn)單的圖像操作,PIL 可能是更輕便的選擇。
  3. 性能:由于OpenCV是用C++編寫的,因此在處理大型圖像和復(fù)雜計(jì)算任務(wù)時(shí)具有較高的性能優(yōu)勢(shì)。PIL庫(kù)在處理大型圖像時(shí)可能效率稍低。
  4. 生態(tài)系統(tǒng):OpenCV擁有龐大的社區(qū)支持和豐富的文檔資源,可以幫助您解決問(wèn)題和學(xué)習(xí)。而PIL庫(kù)的社區(qū)活動(dòng)相對(duì)較少,文檔資源相對(duì)較少。

4,如何使用PIL庫(kù)

首先是安裝,比較簡(jiǎn)單:

下面是一個(gè)簡(jiǎn)單的示例,演示了如何使用PIL庫(kù)來(lái)打開(kāi)一個(gè)圖像文件,然后將圖像轉(zhuǎn)換為灰度圖,并保存到新的文件中:

雖然 OpenCV 在計(jì)算機(jī)視覺(jué)和更復(fù)雜的圖像處理任務(wù)中表現(xiàn)得非常強(qiáng)大,但選擇使用哪個(gè)庫(kù)通常取決于具體的需求和項(xiàng)目特點(diǎn)。在一些情況下,PIL 可能更為合適,而在其他情況下,特別是涉及到計(jì)算機(jī)視覺(jué)領(lǐng)域的任務(wù),OpenCV 可能更具優(yōu)勢(shì)。

總體來(lái)說(shuō),網(wǎng)上開(kāi)源的一些計(jì)算機(jī)視覺(jué)中也使用PIL加載圖像,所以有不得不學(xué)習(xí)的理由,話不多說(shuō),開(kāi)干:

一:pillow模塊的基本概念

Pillow的官網(wǎng)地址:https://pillow.readthedocs.io/en/stable/,其實(shí)打開(kāi)后,什么都有,只是都是英文,對(duì)于部分同學(xué)不方面而已。

python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

PIL:Python Imaging Library,已經(jīng)是Python平臺(tái)上的圖像處理標(biāo)準(zhǔn)庫(kù)了。由于PIL僅支持到Python2.7 ,加上年久失修,于是一群志愿者在PIL的基礎(chǔ)上創(chuàng)建了兼容的版本,名字叫Pillow,支持最新版本的Python3.X,又加了許多新特性。因此,我們可以直接安裝使用Pillow。

PIL中所涉及的基本概念有如下幾個(gè):通道(bands)、模式(mode)、尺寸(size)、坐標(biāo)系統(tǒng)(coordinate system)、調(diào)色板(palette)、信息(info)和濾波器(filters)。

1.1? 通道——Image.getbands

每張圖片都是由一個(gè)或者多個(gè)數(shù)據(jù)通道構(gòu)成。PIL允許在單張圖片中合成相同維數(shù)和深度的多個(gè)通道。

以RGB圖像為例,每張圖片都是由三個(gè)數(shù)據(jù)通道構(gòu)成,分別為R、G和B通道。而對(duì)于灰度圖像,則只有一個(gè)通道。

對(duì)于一張圖片的通道數(shù)量和名稱,可以通過(guò)方法getbands()來(lái)獲取。方法getbands()是Image模塊的方法,它會(huì)返回一個(gè)字符串元組(tuple)。該元組將包括每一個(gè)通道的名稱。

Python的元組與列表類似,不同之處在于元組的元素不能修改,元組使用小括號(hào),列表使用方括號(hào),元組創(chuàng)建很簡(jiǎn)單,只需要在括號(hào)中添加元素,并使用逗號(hào)隔開(kāi)即可。

方法getbands()的使用如下:

1.2? 模式——Image.mode

圖像的模式定義了圖像的類型和像素的位寬。當(dāng)前支持如下模式:

可以通過(guò)mode屬性讀取圖像的模式。其返回值是包括上述模式的字符串。

屬性mode的使用如下:

1.3? 尺寸——Image.size

通過(guò)size屬性可以獲取圖片的尺寸。這是一個(gè)二元組,包含水平和垂直方向上的像素?cái)?shù)。

屬性mode的使用如下:

1.4? 坐標(biāo)系統(tǒng)

在PIL(或Pillow)中,圖像的坐標(biāo)系統(tǒng)遵循常見(jiàn)的數(shù)學(xué)坐標(biāo)系,其中左上角是原點(diǎn)(0, 0),x軸向右增長(zhǎng),y軸向下增長(zhǎng)。這意味著圖像的左上角具有坐標(biāo) (0, 0) ,而右下角的坐標(biāo)是 (width-1, height-1) 。

以下是一個(gè)簡(jiǎn)單的示例說(shuō)明PIL的坐標(biāo)系統(tǒng):

輸出圖像:

python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

1.5? 調(diào)色板 ——Image.palette

在PIL(Python Imaging Library)中,調(diào)色板(Palette)是一種用于存儲(chǔ)和管理顏色映射的機(jī)制。調(diào)色板通常與圖像的索引顏色模式一起使用,這意味著圖像的每個(gè)像素值不直接表示顏色,而是作為索引來(lái)查找調(diào)色板中的實(shí)際顏色。

以下是有關(guān)調(diào)色板的一些重要概念和說(shuō)明:

  1. 索引顏色模式:

    • 在索引顏色模式中,圖像的每個(gè)像素值都是一個(gè)索引,該索引對(duì)應(yīng)于調(diào)色板中的顏色。
    • 通常,索引顏色模式用于節(jié)省存儲(chǔ)空間,特別是對(duì)于包含有限顏色集的圖像。
  2. 調(diào)色板的組成:

    • 調(diào)色板是一個(gè)包含顏色信息的數(shù)據(jù)結(jié)構(gòu),通常由顏色元組組成。顏色元組可以是RGB(紅、綠、藍(lán))格式,也可以是其他顏色表示格式。
    • 對(duì)于每個(gè)索引,調(diào)色板中都有一個(gè)與之對(duì)應(yīng)的顏色。
  3. 使用調(diào)色板的圖像格式:

    • 一些常見(jiàn)的使用調(diào)色板的圖像格式包括GIF和PNG-8。這些格式在保存圖像時(shí)使用調(diào)色板,而不是直接存儲(chǔ)每個(gè)像素的完整顏色信息。
  4. 圖像的調(diào)色板屬性:

    • PIL中的圖像對(duì)象具有調(diào)色板屬性,通過(guò)該屬性可以獲取和設(shè)置圖像的調(diào)色板。
    • 使用 image.getpalette() 方法可以獲取圖像的調(diào)色板,而 image.putpalette() 方法可以設(shè)置調(diào)色板。

以下是一個(gè)簡(jiǎn)單的示例,演示如何使用PIL中的調(diào)色板:

這個(gè)例子創(chuàng)建了一個(gè)調(diào)色板,然后使用索引顏色模式創(chuàng)建了一個(gè)8x8的圖像,并通過(guò)設(shè)置像素值(索引)來(lái)使用調(diào)色板中的顏色。

1.6? 信息 ——Image.info

使用info屬性可以為一張圖片添加一些輔助信息。這個(gè)是字典對(duì)象。加載和保存圖像文件時(shí),多少信息需要處理取決于文件格式。

屬性info的使用如下:

1.7? 濾波器

對(duì)于將多個(gè)輸入像素映射為一個(gè)輸出像素的幾何操作,PIL提供了四個(gè)不同的采樣濾波器。

Image模塊中的方法 resize() 和 thumbnail()用到了濾波器。

方法resize() 的使用如下:

對(duì)參數(shù)filter不賦值的話,方法resize()默認(rèn)使用NEAREST濾波器。如果要使用其他濾波器可以通過(guò)下面的方法來(lái)實(shí)現(xiàn):

2,Image對(duì)象

2.1? 實(shí)例化對(duì)象

直接讀取圖片

2.2 格式轉(zhuǎn)換——save方法

save方法用于保存圖像,當(dāng)不指定文件格式時(shí),它會(huì)以默認(rèn)的圖片格式來(lái)存儲(chǔ);如果指定圖片格式,則會(huì)以指定的格式存儲(chǔ)圖片,語(yǔ)法如下:

2.3? 格式轉(zhuǎn)換——Convert方法

注意: 并非所有的圖片格式都可以用 save() 方法轉(zhuǎn)換完成,比如將 PNG 格式的圖片保存為 JPG 格式,如果直接使用 save() 方法就會(huì)出現(xiàn)錯(cuò)誤,引發(fā)錯(cuò)誤的原因是由于 PNG 和 JPG 圖像模式不一致導(dǎo)致的。其中 PNG 是四通道 RGBA 模式,即紅色、綠色、藍(lán)色、Alpha 透明色;JPG 是三通道 RGB 模式。因此要想實(shí)現(xiàn)圖片格式的轉(zhuǎn)換,就要將 PNG 轉(zhuǎn)變?yōu)槿ǖ?RGB 模式。

Image 類提供的 convert() 方法可以實(shí)現(xiàn)圖像模式的轉(zhuǎn)換。該函數(shù)提供了多個(gè)參數(shù),比如 mode、matrix、dither 等,其中最關(guān)鍵的參數(shù)是 mode,其余參數(shù)無(wú)須關(guān)心

語(yǔ)法:

2.4? 圖像縮放

在圖像處理過(guò)程中經(jīng)常會(huì)遇到縮小或放大圖像的情況,Image 類提供的 resize() 方法能夠?qū)崿F(xiàn)任意縮小和放大圖像

語(yǔ)法:

2.5? 圖像的分離和合并

圖像(指數(shù)字圖像)由許多像素點(diǎn)組成,像素是組成圖像的基本單位,而每一個(gè)像素點(diǎn)又可以使用不同的顏色,最終呈現(xiàn)出了絢麗多彩的圖像 ,而圖像的分離與合并,指的就是圖像顏色的分離和合并

圖像分離:split方法

示例:

圖像合并:merge方法

Image 類提供的 merge() 方法可以實(shí)現(xiàn)圖像的合并操作。注意,圖像合并,可以是單個(gè)圖像合并,也可以合并兩個(gè)以上的圖像

示例:

圖像合并:blend方法

Image 類也提供了 blend() 方法來(lái)混合 RGBA 模式的圖片(PNG 格式)

語(yǔ)法:

2.6? 圖像裁剪

Image 類提供的 crop() 函數(shù)允許我們以矩形區(qū)域的方式對(duì)原圖像進(jìn)行裁剪

語(yǔ)法:

box 是一個(gè)有四個(gè)數(shù)字的元組參數(shù) (x_左上,y_左下,x1_右上,y1_右下),分別表示被裁剪矩形區(qū)域的左上角 x、y 坐標(biāo)和右下角 x,y 坐標(biāo)。默認(rèn) (0,0) 表示坐標(biāo)原點(diǎn),寬度的方向?yàn)?x 軸,高度的方向?yàn)?y 軸,每個(gè)像素點(diǎn)代表一個(gè)單位

3,代碼實(shí)戰(zhàn)

3.1 圖像的屬性的打印示例

注意:源文件的文件格式。如果是由PIL創(chuàng)建的空?qǐng)D像,則其文件格式為None,即?im.format ? string or None

示例代碼如下:

3.2? 使用PIL進(jìn)行灰度化+二值化

代碼如下:

原圖圖片效果展示:

python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

灰度化圖片效果展示:

python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

二值化圖片效果展示:

python計(jì)算機(jī)視覺(jué)學(xué)習(xí)筆記——PIL庫(kù)的用法

3.2? 圖像轉(zhuǎn)換示例

代碼如下:

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)