探索PIL庫:Python圖像處理的強大工具

文章一覽

  • 前言
  • 一、PIL圖像處理庫簡介
  • 二、基本概念
    • 2.1顏色模型
      • 2.1.1 RGB 顏色模型
      • 2.1.2 CMY色彩空間
    • 2.2 通道
    • 2.3 圖像數據
    • 2.4 模式
  • 三、用PIL做圖像處理
    • 3.1 圖像縮放、翻轉等處理
      • 3.1.1 圖像縮放處理
      • 3.1.2 圖像旋轉處理
        • (1)PIL 提供的函數:
        • (2)利用numpy數組處理
    • 3.2 調整亮度
    • 3.3 圖像高度裁剪
    • 3.4 圖像過濾
    • 3.5圖像增強

前言

在這個視覺至上的時代,圖像已成為我們日常生活中不可或缺的一部分。無論是社交媒體上的分享,還是專業領域的圖像分析,圖像處理技術都扮演著至關重要的角色。但你是否曾想過,如何將這些靜態的圖像轉化為動態的故事,或者從海量的圖像數據中提取出有價值的信息?這正是Python圖像處理庫——PIL(Python Imaging Library)的神奇之處。

歡迎進入PIL的世界,這里是創意與技術的交匯點。

PIL庫不僅僅是一個工具集,它是一個強大的盟友,幫助你解鎖圖像處理的無限可能。從基本的圖像編輯到復雜的圖像分析,PIL庫以其簡潔的API和強大的功能,讓圖像處理變得輕松而高效。無論是調整圖片大小、應用濾鏡效果,還是進行圖像識別和機器學習,PIL庫都能助你一臂之力。

隨著我們深入探索PIL庫的奧秘,你將發現,它不僅能夠增強你的圖像處理能力,還能夠激發你的創造力,讓你在圖像的世界里自由翱翔。讓我們一起揭開PIL庫的神秘面紗,開啟一段圖像處理的奇妙旅程吧!

一、PIL圖像處理庫簡介

Python 中有關圖像處理的庫有很多,常見的有 PIL、cv2 等。在進行深度學習圖像任務的時候,常常會使用 PIL 這個庫來讀取和處理圖片

PIL(Python Imaging Library)庫是一個具有強大圖像處理能力的第三方庫,包含了豐富的像素、色彩等操作功能。

PIL 庫支持圖像存儲、顯示和處理,它能夠處理幾乎所有圖片格式,可以完成對圖像的縮放、裁剪、旋轉、濾鏡、疊加以及向圖像添加線條、圖像和文字等操作。

安裝:

在命令行模式下:pip install pillow

pip 如果版本低,可升級更新:python -m pip install --upgrade pip

根據功能不同,PIL 庫共包括 21 個與圖片相關的類,這些類可以被看作是子庫或 PIL 庫中的模塊

Image、ImageChops、ImageColor、ImageCrackCode、Image Enhance、ImageDraw ImageFile、ImageFileIO、ImageFilter、Image Font、ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWin

Image 是 PIL 中最重要的模塊

? from PIL import Image

二、基本概念

PIL 中所涉及的基本概念有如下幾個:顏色模型通道模式尺寸

2.1顏色模型

2.1.1 RGB 顏色模型

組成:紅?、綠(G)、藍(B),每個點三個分量(R,G,B)

通常可以將 r、g、b 分別規整化為【0,1】,當使用 8 bit進行存儲時,r、g、b通常取值為 [0,255] 內的整數

2.1.2 CMY色彩空間

CMY 是不同于 RGB 的另外一組基本色彩:Cyan(青)、Magenta(品紅)、Yellow(黃),分別是 R、G、B 的補色

比如:青 = 1 - 紅色,品紅 = 1- 綠色。CMY 稱為“減色系統”,而 RGB 稱為“加色系統

RGB ——(0,0,0)為黑,(1,1,1)為白;值越大,顏色越亮

CMY ——(0,0,0)為白,(1,1,1)為黑,值越大,顏色越暗

2.2 通道

一幅彩色圖像包括三個通道:Red 通道,Green 通道和 Blue 通道

在圖像空間顯示出來就是三張圖片疊加起來,每張圖片對應一個通道。而對于黑白圖像,則只有 1 個通道

在這里插入圖片描述

這張彩色圖像是如何存儲的?

在圖像空間顯示出來就是三張圖片疊加起來,每張圖片對應一個通道

2.3 圖像數據

#導入相應的模塊
import numpy as np
import matplotlib.pyplot as plt
# 隨機生成 300x400 的多維數組
img = np.random.random([300,400])
plt.imshow(img)
plt.show()

圖像的像素值可以用矩陣來表示,是一個由像素組成的二維矩陣,每個元素是一個 RGB

圖像數據可以轉換成 NumPy 中的數組元素

imshow() 功能:將數據顯示為圖像

  • X:numpy 數組或 PIL 圖像
  • cmap:此參數是顏色圖實例或注冊的顏色圖名稱

2.4 模式

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

(1)1:1 位像素,表示黑和白,但是存儲的時候每個像素存儲為 8 bit

(2)L:8 位像素,表示黑和白

(3)P:8 位像素,使用調色板映射到其他模式

(4)RGB:3x8位像素,為真彩色

(5)RGBA:4x8 位像素,有透明通道的真彩色

(6)CMYK:4x8 位像素,顏色分離(出版圖像)

三、用PIL做圖像處理

圖像是一個由像素組成的二維矩陣,每個元素是一個 RGB 值:

  • Image.open ():打開圖像
  • image.show():顯示圖像
  • image.save(<文件名>):保存圖像
  • np.array():將圖像轉化為數組
  • plt. imshow() :將數組顯示為圖像

注意: plt. imshow() 和 plt.show() 同時出現才能顯示圖像

import numpy as np
from PIL import Image
image = Image.open('cat.png')
image.show()
im = np.array (image)
print ('shape:',im.shape)

208 × 338 × 3: 3 代表通道信息

圖像數據是多維數組,前兩維表示了圖像的 高(行)、寬(列),第三維表示圖像通道的個數。如果是黑白圖像,默認1個通道

import numpy as np
from PIL import Image
image = Image.open('cat.png')
image = np.array (image)
print (image)
print ('shape:',image.shape)
print ('dtype:',image.dtype)

結果:

shape: (460, 724, 4)
dtype: uint8

查看數據形狀,其形狀是 [H, W, 3]

uint8,無符號整型。表示范圍是 [0, 255] 的整數,像素范圍是 [0,255],也可以歸一化到 [0,1]

用 PIL 獲取圖片 RGB 數值

# 用 PIL 獲取圖片 RGB 數值
from PIL import Image
im = Image.open('cat.png')
width = im.size[0]
height = im.size[1]
array = []
for x in range(5):for y in range(5):r, g, b = im.getpixel((x,y))rgb = (r, g, b)array.append(rgb)
print(array)

黑白圖像

import numpy as np
from PIL import Image
image = Image.open('cat1.png')
image.show()
im = np.array (image)
print ('shape:',im.shape)

結果:shape(208, 338)

如果是黑白圖像,默認1個通道

3.1 圖像縮放、翻轉等處理

from PIL import Image
im = Image.open ('cat.png')
im.show ()

圖像可以進行縮放、翻轉等操作

3.1.1 圖像縮放處理

兩種方法:

  • 1、PIL 提供的函數;
  • 2、因為圖像數據本質上就是 numpy 數組,因此可以通過對數組數據進行處理(比如切片操作)就可以實現對圖像的處理
from PIL import Image
img = Image.open('cat.png')
img = img.resize((104,169))
img.show()

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open('cat.png')
img = np.array(img)
img = img[0:120,100:250]
plt.imshow(img)
plt.show()

3.1.2 圖像旋轉處理

對圖像做旋轉處理有兩種方法:

(1)PIL 提供的函數:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('cat.png')
img = img.rotate(45)
img.show()

(2)利用numpy數組處理

因為圖像數據本質上就是 numpy 數組,因此可以通過對數組數據進行處理(比如切片操作)就可以實現對圖像的處理

上下翻轉

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('cat.png')
image = np.array (img)
image = image[::-1, :, :]
plt.imshow(image)
plt.show()

左右翻轉

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
image = Image.open('體育館.png')
plt.imshow(image)
plt.show()

image = Image.open('體育館.png')
image1 = np.array (image)
image2 = image1[:, ::-1, :]
plt.imshow(image2)
plt.show()

3.2 調整亮度

image = Image.open('cat.png')
image = np.array (image)
image1 = image * 0.5
image1 = np.clip(image1,a_min=20, a_max=200.)
plt.imshow(image1.astype('uint8'))
plt.show()

np.clip(a, a_min, a_max):這個函數將數組中的元素限制在 a_min, a_max 之間,大于 a_max 的就使得它等于 a_max,小于 a_min,的就使得它等于 a_min

3.3 圖像高度裁剪

image = Image.open('cat.png')
image = np.array (image)
H,W = image.shape[0],image.shape[1]
H1 = H // 2 
H2 = H
image = image[H1:H2, ::]
plt.imshow(image)
plt.show()

Image 的坐標好像是從左上開始的,0在左上

/ 是除法,例如:2/3 = 0.6666。而 // 是表示向下取整的除法,如 3 // 2 = 1,6.0 // 4 = 1

像素只能是整數,所以采用 // 除法

PIL庫的 ImageEnhanceImageFilter 模塊提供了過濾圖像增強圖像的方法

3.4 圖像過濾

ImageFilter 類的預定義過濾方法

方法表示描述
ImageFilter.BLUR圖像的模糊效果
ImageFilter.CONTOUR圖像的輪廓效果
ImageFilter.EDGE_ENHANCE圖像的邊界加強效果
ImageFilter.DETAIL圖像的細節效果
ImageFilter.EMBOSS圖像的浮雕效果
ImageFilter.SMOOTH圖像的平滑效果
ImageFilter.SHARPEN圖像的銳化效果

圖像模糊效果

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter
im = Image.open('qe.png')
im = im.filter(ImageFilter.BLUR)
im.show()

圖像輪廓效果

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter
im = Image.open('qe.png')
conF = im.filter(ImageFilter.CONTOUR)
conF.show()

3.5圖像增強

ImageEnhance 類提供了更高級的圖像增強功能,如調整色彩度、亮度、對比度、銳化等

方法表示描述
ImageEnhance.enhance(factor)對選擇屬性的數值增強factor倍
ImageEnhance.Color(im)調整圖像的顏色平衡
ImageEnhance.Contrast(im)調整圖像的對比度
ImageEnhance.Brightness(im)調整圖像的亮度
ImageEnhance.Sharpness(im)調整圖像的銳度

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64481.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

boot工程需求

1、 關閉看門狗、初始化中斷和trap向量表&#xff0c;進行時鐘和外設初始化&#xff0c;讓芯片正常運行起來 2、 提供CAN ETH等用于通訊功能的驅動&#xff0c;能夠接受外部數據的傳輸請求 3、 提供Flash的讀寫與擦除驅動&#xff0c;設置服務來對通訊端接受到的數據更新代…

C#中的類型和函數參數傳遞

1.類型 C#中類型分為兩類&#xff1a;值類型和引用類型 1.值類型 所有值類型繼承自System.ValueType類&#xff08;這是System.Object的一個子類&#xff09; 值類型變量是直接存儲數據&#xff0c;值類型變量聲明后&#xff0c;不管是否賦值&#xff0c;編譯器都會為其分配…

android系統查找應用包名以及主activity:

一、查找應用的主activity&#xff1a; pm list packages 發現所有的包 dumpsys package 包名&#xff1a; 獲取所有的包信息&#xff0c;可以所有關鍵詞MAIN來找主activity 也可以通過下面命令找到所有activity&#xff0c;看下面大概率com.android.settings/.Settings為主ac…

微信V3支付報錯 平臺證書及平臺證書序列號

1.平臺證書及平臺證書序列號設置錯誤報錯&#xff1a; 錯誤1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

在Ubuntu下通過Docker部署Mastodon服務器

嘿&#xff0c;朋友們&#xff0c;今天咱們來聊聊如何在Ubuntu上通過Docker部署Mastodon服務器。想要擁有自己的社交媒體平臺&#xff1f;Mastodon就是個不錯的選擇&#xff01;&#x1f310;&#x1f680; Docker與Mastodon簡介 Docker是一個開源的容器化平臺&#xff0c;讓…

Es搭建——單節點——Linux

Es搭建——單節點——Linux 一、安裝 下載安裝包&#xff1a; 官網下載地址&#xff1a;https://www.elastic.co/downloads/elasticsearch 上傳包到linux 切換到安裝目錄下 解壓&#xff1a;tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz 重命名安裝文件夾 mv elastics…

【機器學習】梯度下降

文章目錄 1. 梯度下降概念2. 梯度下降的技巧2.1 動態設置學習率2.2 Adagrad調整梯度2.3 隨機梯度下降&#xff08;SGD&#xff09;2.4 特征縮放 3. 梯度下降理論基礎 1. 梯度下降概念 梯度&#xff1a;Loss 對參數在某一點的偏微分&#xff0c;函數沿梯度的方向具有最大的變化…

數據庫在大數據領域的探索與實踐:動態存儲與查詢優化

在大數據時代&#xff0c;數據庫的靈活性與高效性成為數據存儲與分析的重要基石。從關系型數據庫到 NoSQL 數據庫的演進&#xff0c;開發者逐漸可以在結構化與非結構化數據間找到平衡。本文將聚焦大數據場景下的數據庫實踐&#xff0c;尤其是如何動態存儲與查詢復雜數據&#x…

【Python科研數據爬蟲】基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理

基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理 1 背景2 標準檢索平臺2.1 能源標準化信息平臺2.2 全國標準信息公共服務平臺3 標準信息數據的爬取與處理3.1 能源標準化信息平臺的信息爬取3.2 全國標準信息公共服務平臺的信息爬取3.3 標準信…

AWS Certified AI Practitioner 自學考試心得

學習目標&#xff1a; 考取 AWS Certified AI Practitioner 那什么是 AWS Certified AI Practitioner 認證 是基礎級的認證 比較簡單 — 學習內容&#xff1a; 1. AWS網站自學網站 極客時間免費課程&#xff1a;http://gk.link/a/12sJL 配合極客時間課程的章節測試檢驗自…

Ngnix介紹、安裝、實戰及用法!!!

一、Nginx簡介 1、Nginx概述 Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理服務器&#xff0c;特點是占有內存少&#xff0c;并發能力強&#xff0c;能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數 。 2、正向代理 正向代理&#xff1a;如果把局…

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的實現原理-HTTPS的握手流程&#xff08;TLS1.2&#xff09; 簡介1. TLS握手過程概述2. TLS握手過程細化3. 主密鑰&#xff08;對稱密鑰&#xff09;生成過程4. 密碼規范變更 簡介 主要講述了混合加密流程完成后&#xff0c;客戶端和服務器如何共同獲得相同的對稱密鑰…

YOLO11全解析:從原理到實戰,全流程體驗下一代目標檢測

前言 一、模型介紹 二、網絡結構 1.主干網絡&#xff08;Backbone&#xff09; 2.頸部網絡&#xff08;Neck&#xff09; 3.頭部網絡&#xff08;Head&#xff09; 三、算法改進 1.增強的特征提取 2.優化的效率和速度 3.更高的準確性與更少的參數 4.環境適應性強 5.…

C++ 與 Python(靜態類型語言與動態語言)

C 與 Python&#xff08;靜態類型語言與動態語言&#xff09; 一、說明 Python和C到底有啥區別&#xff1f;在使用的時候有啥特殊的益處&#xff1f;這種問題的意義在于&#xff1a;如果對語言了解越清楚&#xff0c;越能夠更加大膽地應用哪些極限功能&#xff0c;從而最大限…

Jenkins 構建流水線

在 Linux 系統上安裝 Jenkins 服務&#xff0c;以及配置自動化構建項目 前置準備環境&#xff1a;docker、docker-compose、jdk、maven 一、環境搭建 1. Jenkins 安裝 &#xff08;1&#xff09;拉取鏡像 # 安裝鏡像包&#xff0c;默認安裝最新版本 docker pull jenkins/jen…

【Java】面試題 并發安全 (1)

文章目錄 synchronized1. 基本概念與作用2. 使用方式3. 底層原理&#xff08;基于monitor&#xff09;4. 面試題回答要點5. 注意事項與進階理解 Java中synchronized鎖相關知識總結Java內存模型&#xff08;JMM&#xff09;CAS概述及重要性volatile關鍵字AQS簡介 synchronized …

前端項目 npm報錯解決記錄

1.首先嘗試解決思路 npm報錯就切換yarn &#xff0c; yarn報錯就先切換npm刪除 node_modules 跟 package-lock.json文件重新下載依 2. 報錯信息&#xff1a; Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…

深度學習中batch_size

Batch size調整和epoch/iteration的關系 訓練數據集總共有1000個樣本。若batch_size10&#xff0c;那么訓練完全體樣本集需要100次迭代&#xff0c;1次epoch。 訓練樣本10000條&#xff0c;batchsize設置為20&#xff0c;將所有的訓練樣本在同一個模型中訓練5遍&#xff0c;則…

Redis 數據類型全解析:基礎與進階應用場景

前言&#xff1a;Redis 是一個高性能的內存數據庫&#xff0c;支持多種數據類型&#xff0c;能夠高效處理各種場景的數據存儲和操作。 以下是Redis數據類型的數據結構及其應用場景的詳細說明&#xff1a; 基礎數據類型 1. 字符串 (String) 底層數據結構 Simple Dynamic Stri…

評分模型在路網通勤習慣分析中的應用——提出問題(1)

1、問題的由來、目標和意義 最近一段時間和公司其它業務部門討論時&#xff0c;發現一個有趣的交通路網問題&#xff0c;車輛從S點行駛到V點共用時40分鐘&#xff0c;這段時間內路網中的卡口攝像頭識別到了車輛通過的信息。如下圖所示&#xff1a; 設計師需要通過這些有限的路…