Python影像處理-Pillow套件

更新於 發佈於 閱讀時間約 15 分鐘

在當今的數位時代,圖像處理已成為許多應用和項目的核心部分,從網站設計到機器學習,高效且靈活的圖像處理工具變得越來越重要。本文將介紹一個好用的Python套件-Pillow,Pillow套件是Python Imaging Library(PIL)的一個分支雖,然它不像Photoshop等軟體一樣強大,但我們可以透過程式碼一次操作大量的圖片,以下是Pillow套件常用到的場合:

  • 開啟和保存圖檔
  • 顯示圖檔
  • 圖像操作
  • 圖像濾鏡
  • 圖像繪圖
  • 圖像模式轉換
  • 圖像合併
  • 色彩調整

等等許多的功能,在使用Pillow套件之前,我們需要先安裝它,只要在終端機打上:

pip install pillow

若沒有錯誤訊息則代表安裝套件成功!接下來,我們就可以使用Pillow套件來操作圖像了。

開啟、顯示圖像

from PIL import Image 
# 開啟圖像
image = Image.open(image_path)
# 顯示圖像
image.show()

image_path 輸入圖像路徑就可以創建一個物件 imageimage儲存了圖像的各種資料,可以先使用 image.show() 來顯示圖片,這邊準備了一張名為 test.png 的圖片,用上述方法將圖片開啟並顯示:

from PIL import Image 
image = Image.open('test.png')
image.show()
test.png

test.png

儲存圖片、轉檔

可以使用以下程式碼將圖片儲存

# 儲存圖片
image.save(path)

雖然只有短短的一行,但PIL.Image會根據我們的附檔名來使用特定的格式儲存,例如將上述的圖片以jpg的形式儲存:

# 將圖片以jpg的格式儲存 
image.save('test.jpg')
# 開啟test.jpg
image_jpg = Image.open('test.jpg')
# 顯示test.jpg
image_jpg.show()
test.jpg

test.jpg

取得圖像信息

每張圖片都有一些基本的屬性,如大小、格式和模式,可以使用以下程式碼來獲取:

# 獲取圖像大小(寬度和高度) 
width, height = image.size
# 獲取圖像格式(例如:JPEG、PNG)
format = image.format
# 獲取圖像模式(例如:RGB、RGBA、L)
mode = image.mode

來看看test.png的屬性:

width, height = image.size 
fmt = image.format
mode = image.mode
print(f'大小:{width}x{height}')
print(f'格式:{fmt}')
print(f'模式:{mode}')
大小:1920x1088
格式:PNG
模式:RGB

圖像裁剪

如果想要從圖像中裁剪出一部份,可以使用 crop() 方法

# 定義裁剪區域的左上角和右下角坐標 
box = (left, upper, right, lower)
cropped_image = image.crop(box)

例如將test.png從(0 ,0)到(500, 500)裁減出來並儲存:

box = (0, 0, 500, 500)
cropped_image = image.crop(box)
cropped_image.save('cropped.png')
cropped.png

cropped.png

圖像旋轉

使用 rotate() 方法,可以輕鬆地旋轉圖片:

# 旋轉 90 度
rotated_image = image.rotate(90)

例如將 `cropped_image` 旋轉90度,並儲存為rotated.png:

rotated_image = cropped_image.rotate(90)
rotated_image.save('rotated.png')
rotated.png

rotated.png

圖像縮放

如果要變更圖像的大小,則可以使用 resize() 方法:

new_size = (new_width, new_height)
resized_image = image.resize(new_size)

例如將test.png的長寬縮小一半,顯示縮小過後的大小並儲存為resize.png

new_size = (width // 2, height // 2)
resized_image = image.resize(new_size)
resized_width, resized_height = resized_image.size
print(f"縮小後的圖像大小:{resized_width}x{resized_height}")
resized_image.save('resized.png')
縮小後的圖像大小:960x544
resized.png

resized.png

圖像濾鏡

Pillow提供了多種濾鏡,如模糊、銳化等,使用濾鏡的方式如下:

from PIL import ImageFilter

# 使用BLUR濾鏡
blurred_image = image.filter(ImageFilter.BLUR)

以下是常用的濾鏡:

  1. BLUR:模糊濾鏡,使圖像變得模糊。
  2. CONTOUR:輪廓濾鏡,強調圖像的輪廓。
  3. DETAIL:細節增強濾鏡,增強圖像的細節。
  4. EDGE_ENHANCE:邊緣增強濾鏡,強調圖像的邊緣。
  5. EDGE_ENHANCE_MORE:更強的邊緣增強濾鏡。
  6. EMBOSS:浮雕效果,使圖像具有三維效果。
  7. FIND_EDGES:邊緣檢測濾鏡,檢測圖像中的邊緣。
  8. SHARPEN:銳化濾鏡,增強圖像的對比度。
  9. SMOOTH:平滑濾鏡,減少圖像的噪音。
  10. SMOOTH_MORE:更強的平滑濾鏡。
  11. GAUSSIANBLUR(radius):高斯模糊,其中 radius 指定模糊的半徑。
  12. UNSHARP_MASK(radius, percent, threshold):非銳化遮罩,用於增強圖像的細節。

將test.png套用CONTOUR濾鏡,並儲存為contourred.png:

from PIL import ImageFilter
contourred_image = image.filter(ImageFilter.CONTOUR)
contourred_image.save('contourred.png')
contourred.png

contourred.png

圖像繪圖

使用 Pillow,還可以在圖像上繪製形狀和文字。以下是一個簡單的示例,顯示如何在圖像上繪製一個矩形:

from PIL import ImageDraw

draw = ImageDraw.Draw(image)

# 在座標(50, 50)至(150, 150)繪製一個外框為紅色,內部填滿藍色的矩形
rectangle_position = (50, 50, 150, 150)
draw.rectangle(rectangle_position, fill="blue", outline="red")

或者是在圖像上繪製文字:

from PIL import ImageDraw, ImageFont
draw = ImageDraw.Draw(image)
# 使用內置字體
font = ImageFont.load_default()

# 或使用自己的字體文件(例如 TTF 或 OTF 格式)
# font = ImageFont.truetype('path_to_your_font.ttf', size=30)

# 文字的起始位置
position = (50, 50)
# 白色
text_color = (255, 255, 255)
draw.text(position, "Hello, Pillow!", fill=text_color, font=font)

在resized.png上繪製一個矩形,並寫上test,儲存為drawn.png:

from PIL import ImageDraw, ImageFont

# 繪製矩形
drawn_image = Image.open('resized.png')
draw = ImageDraw.Draw(drawn_image)
rectangle_position = (50, 50, 150, 150)
draw.rectangle(rectangle_position, fill="blue", outline="red")

# 寫上test.png
font = ImageFont.load_default()
position = (50, 50)
text_color = (255, 255, 255)
draw.text(position, "test", fill=text_color, font=font)
drawn_image.save('drawn.png')
drawn.png

drawn.png

除了矩形之外,還有以下圖形可以繪製:

  1. 線條 (Line):
draw.line((start_x, start_y, end_x, end_y), fill=color)
  1. 矩形 (Rectangle):
draw.rectangle((left, upper, right, lower), fill=fill_color, outline=outline_color)
  1. 橢圓 (Ellipse):
    使用與矩形相同的坐標系統,但繪製的是一個橢圓,該橢圓完全位於指定的矩形內。
draw.ellipse((left, upper, right, lower), fill=fill_color, outline=outline_color)
  1. 圓 (Circle):
    圓實際上是一種特殊的橢圓,可以使用 ellipse 方法繪製它,只需確保矩形的寬度和高度相同。
draw.ellipse((center_x-radius, center_y-radius, center_x+radius, center_y+radius), fill=fill_color, outline=outline_color)
  1. 多邊形 (Polygon):
    可以繪製三角形、四邊形或其他多邊形。
draw.polygon([(x1, y1), (x2, y2), ...], fill=fill_color, outline=outline_color)
  1. 圓弧 (Arc):
    繪製橢圓的一部分。
draw.arc((left, upper, right, lower), start_angle, end_angle, fill=color)
  1. 扇形 (Chord):
    與圓弧相似,但須連接起始和結束點。
draw.chord((left, upper, right, lower), start_angle, end_angle, fill=fill_color, outline=outline_color)
  1. 餅狀圖 (Pieslice):
    與扇形相似,但還有一條從起始點到橢圓中心的線,以及一條從結束點到橢圓中心的線。
draw.pieslice((left, upper, right, lower), start_angle, end_angle, fil

圖像模式轉換

圖像的模式如下:

  1. L - 亮度 (Luminance)。這是一個灰度模式,其中每個像素使用 8 位(1 byte)表示,範圍從 0(黑色)到 255(白色)。
  2. RGB - 紅色、綠色和藍色模式。這是一個真彩色模式,其中每個像素由三個 8 位的值組成,分別表示紅色、綠色和藍色。
  3. RGBA - 與 RGB 相同,但還有一個額外的透明度通道(Alpha)。Alpha 通道用於表示像素的透明度。
  4. CMYK - 青色、品紅、黃色和黑色模式。這是一個用於印刷的模式,其中每個像素由四個 8 位的值組成。
  5. YCbCr - 亮度和色差模式。它是一種用於數字視頻的模式。
  6. LAB - CIELAB 色彩空間。它是一種用於描述人類視覺感知的色彩的模式。
  7. HSV - 色調、飽和度和值模式。
  8. I - 32 位整數像素模式。
  9. F - 32 位浮點像素模式。
  10. P - 調色板模式。在此模式下,圖像的數據是 8 位的索引值,這些值對應於一個調色板,調色板中包含實際的 RGB 值。

可以使用 convert()轉換:

gray_image = image.convert('L')

例如將resized.png轉換成灰階的形式,並儲存成gray.png:

gray_image = resized_image.convert('L')
print(f'格式:{gray_image.mode}')
gray_image.save('gray.png')
格式:L
gray.png

gray.png

圖像合併

如果擁有多張圖像,可以使用 ImageChopsblend() 函式合併圖片, alphaimage2 貼在 image1 的透明度:

from PIL import ImageChops

# 合併兩張圖像
merged_image = ImageChops.blend(image1, image2, alpha=0.5)

這個的例子我們將在下一篇介紹如何製作gif時用到。

圖像的色彩調整

使用Pillow套件也可調整圖像的亮度,對比度與飽和度,示例如下:

調整亮度

from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(image)
# 增加亮度,1.5 表示增加 50%
brighter_image = enhancer.enhance(1.5)

調整對比度

enhancer = ImageEnhance.Contrast(image)
# 增加對比度,2.0 表示增加 100%
contrast_image = enhancer.enhance(2.0)

調整飽和度

enhancer = ImageEnhance.Color(image)
# 增加飽和度,1.5 表示增加 50%
saturated_image = enhancer.enhance(1.5)

以上是Pillow套件的一些基礎操作,當然,Pillow套件還有許多強大的功能,在下一篇文章會介紹如何使用Pillow套件來製作gif動畫。

avatar-img
13會員
4內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
OpenCV 支援讀取和保存 TIFF(Tagged Image File Format)檔案,但對於合併多張圖片成為多頁的 TIFF 檔案,OpenCV 沒有的這功能。 可以使用 Pillow 庫(Python Imaging Library, PIL 的分支)來實現。
Thumbnail
PyTorch 是一個開源的 Python 機器學習庫,基於 Torch 庫,底層由 C++ 實現,應用於人工智慧領域,如電腦視覺和自然語言處理等。 PyTorch 2.4 引入了多項新功能和改進,包括支援 Python 3.12、AOTInductor 凍結功能、新的高階 Python 自訂運算
Thumbnail
想要使用python學習程式應該要怎麼開始呢? 首先就是要下載Python(程式語言)還有Pychar(整合開發環境,IDE)這兩個軟體。 在Google的搜尋欄位打上Python下載, 點選第一個Download Python。 第二步點選Download,選擇你的電腦系統。
Thumbnail
在幾乎人人都有手機的時代,相簿裡會有許多生活的紀錄,但很少有人會回頭整理,導致許多知識都被忽略。因此,今天要跟大家分享一款很棒的 AI 工具,專為解決這個問題而生 — Photes.io。它能將我們日常生活的照片、螢幕截圖,以及圖像轉化為筆記,並直接匯出到 Notion 中,大大提升我們的生產力。
Thumbnail
今天,捷可印將帶各位讀者來探討 Photopea 這款類似於 Photoshop 的影像處理工具,特別是其智能選取功能,以及如何利用這些工具來改進您的圖片處理工作流程。在圖片處理的世界中,有效的工具不僅提升效率,更能賦予創作者更大的創作自由。 一、Photopea 的選取工具:精確與效率的完美
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
OpenCV 支援讀取和保存 TIFF(Tagged Image File Format)檔案,但對於合併多張圖片成為多頁的 TIFF 檔案,OpenCV 沒有的這功能。 可以使用 Pillow 庫(Python Imaging Library, PIL 的分支)來實現。
Thumbnail
PyTorch 是一個開源的 Python 機器學習庫,基於 Torch 庫,底層由 C++ 實現,應用於人工智慧領域,如電腦視覺和自然語言處理等。 PyTorch 2.4 引入了多項新功能和改進,包括支援 Python 3.12、AOTInductor 凍結功能、新的高階 Python 自訂運算
Thumbnail
想要使用python學習程式應該要怎麼開始呢? 首先就是要下載Python(程式語言)還有Pychar(整合開發環境,IDE)這兩個軟體。 在Google的搜尋欄位打上Python下載, 點選第一個Download Python。 第二步點選Download,選擇你的電腦系統。
Thumbnail
在幾乎人人都有手機的時代,相簿裡會有許多生活的紀錄,但很少有人會回頭整理,導致許多知識都被忽略。因此,今天要跟大家分享一款很棒的 AI 工具,專為解決這個問題而生 — Photes.io。它能將我們日常生活的照片、螢幕截圖,以及圖像轉化為筆記,並直接匯出到 Notion 中,大大提升我們的生產力。
Thumbnail
今天,捷可印將帶各位讀者來探討 Photopea 這款類似於 Photoshop 的影像處理工具,特別是其智能選取功能,以及如何利用這些工具來改進您的圖片處理工作流程。在圖片處理的世界中,有效的工具不僅提升效率,更能賦予創作者更大的創作自由。 一、Photopea 的選取工具:精確與效率的完美
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉