ImageFilter 模組

ImageFilter 模組包含一組預先定義的濾鏡定義,可與 Image.filter() 方法搭配使用。

範例:過濾影像

from PIL import ImageFilter

im1 = im.filter(ImageFilter.BLUR)

im2 = im.filter(ImageFilter.MinFilter(3))
im3 = im.filter(ImageFilter.MinFilter)  # same as MinFilter(3)

濾鏡

Pillow 提供下列一組預先定義的影像增強濾鏡

  • BLUR

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SHARPEN

  • SMOOTH

  • SMOOTH_MORE

class PIL.ImageFilter.Color3DLUT(size: int | tuple[int, int, int], table: Sequence[float] | Sequence[Sequence[int]] | NumpyArray, channels: int = 3, target_mode: str | None = None, **kwargs: bool)[原始碼]

三維色彩查找表。

使用通道的值作為 3D 查找表中的座標,並內插最近的元素,來轉換 3 通道像素。

此方法可讓您透過使用預先計算的縮減表,在恆定時間內套用幾乎任何色彩轉換。

在 5.2.0 版本中新增。

參數:
  • size – 表格大小。一個整數或 (整數、整數、整數) 的元組。任何維度的最小大小為 2,最大為 65。

  • table – 平面查找表。一個由 channels * size**3 個 float 元素組成的清單,或是由 size**3 個帶有浮點數的通道大小元組組成的清單。通道會先變更,然後是第一個維度、第二個維度,接著是第三個維度。值 0.0 對應於輸出的最低值,1.0 對應於最高值。

  • channels – 表格中的通道數。可以是 3 或 4。預設值為 3。

  • target_mode – 結果影像的模式。應具有不少於 channels 個通道。預設值為 None,表示模式不會變更。

classmethod generate(size: int | tuple[int, int, int], callback: Callable[[float, float, float], tuple[float, ...]], channels: int = 3, target_mode: str | None = None) Color3DLUT[原始碼]

使用提供的回呼函數產生新的 LUT。

參數:
  • size – 表格的大小。傳遞給建構函式。

  • callback – 具有三個參數的函數,分別對應三個顏色通道。將會以從 0.0 到 1.0 的值呼叫 size**3 次,並應返回一個具有 channels 個元素的元組。

  • channels – 回呼函數應返回的通道數量。

  • target_mode – 傳遞給產生的查找表的建構函式。

transform(callback: Callable[[...], tuple[float, ...]], with_normals: bool = False, channels: int | None = None, target_mode: str | None = None) Color3DLUT[原始碼]

使用提供的回呼函數轉換表格值,並返回一個具有更改值的新 LUT。

參數:
  • callback – 一個函數,它接受舊的查找表值並返回一組新的值。函數應接受的參數數量為 self.channels3 + self.channels (如果設定了 with_normals 標誌)。如果已設定,則應返回一個具有 self.channelschannels 個元素的元組。

  • with_normals – 如果為 true,則會將色彩立方體中的座標作為前三個參數傳遞給 callback。否則,callback 只會使用實際的顏色值來呼叫。

  • channels – 結果查找表中的通道數量。

  • target_mode – 傳遞給產生的查找表的建構函式。

class PIL.ImageFilter.BoxBlur(radius: float | Sequence[float])[原始碼]

通過將每個像素設定為在每個方向上延伸半徑像素的正方形框中像素的平均值來模糊影像。支援任意大小的浮點半徑。使用最佳化實作,對於任何半徑值,在相對於影像大小的線性時間內執行。

參數:

radius

一個方向上框的大小。可以是兩個數字的序列,分別表示 x 和 y,也可以是一個數字,表示 x 和 y 的相同值。

半徑 0 不會模糊,返回相同的影像。半徑 1 在每個方向取 1 個像素,即總共 9 個像素。

class PIL.ImageFilter.GaussianBlur(radius: float | Sequence[float] = 2)[原始碼]

使用一系列擴展的盒式濾波器模糊影像,這近似於高斯核心。有關準確性的詳細資訊,請參閱 <https://www.mia.uni-saarland.de/Publications/gwosdek-ssvm11.pdf>

參數:

radius – 高斯核心的標準差。可以是兩個數字的序列,分別表示 x 和 y,也可以是一個數字,表示 x 和 y 的相同值。

class PIL.ImageFilter.UnsharpMask(radius: float = 2, percent: int = 150, threshold: int = 3)[原始碼]

銳化遮罩濾鏡。

關於參數的說明,請參閱維基百科上關於數位銳化遮罩的條目。

參數:
  • radius – 模糊半徑

  • percent – 銳化強度,以百分比表示

  • threshold – 閾值控制將被銳化的最小亮度變化

class PIL.ImageFilter.Kernel(size: tuple[int, int], kernel: Sequence[float], scale: float | None = None, offset: float = 0)[來源]

建立卷積核。這僅支援 3x3 和 5x5 整數和浮點數核心。

核心只能應用於 “L” 和 “RGB” 影像。

參數:
  • size – 核心大小,以 (寬度, 高度) 形式給定。必須是 (3,3) 或 (5,5)。

  • kernel – 包含核心權重的序列。核心在應用到影像之前將會垂直翻轉。

  • scale – 縮放因子。如果給定,則每個像素的結果將除以這個值。預設值是核心權重的總和。

  • offset – 偏移量。如果給定,則將此值加到結果中,在除以縮放因子之後。

class PIL.ImageFilter.RankFilter(size: int, rank: int)[來源]

建立排序濾鏡。排序濾鏡會將給定大小的視窗中的所有像素排序,並傳回第 rank 個值。

參數:
  • size – 核心大小,以像素為單位。

  • rank – 要選擇的像素值。使用 0 表示最小濾鏡, size * size / 2 表示中值濾鏡, size * size - 1 表示最大濾鏡,等等。

class PIL.ImageFilter.MedianFilter(size: int = 3)[來源]

建立中值濾鏡。在給定大小的視窗中選擇中值像素值。

參數:

size – 核心大小,以像素為單位。

class PIL.ImageFilter.MinFilter(size: int = 3)[來源]

建立最小濾鏡。在給定大小的視窗中選擇最低的像素值。

參數:

size – 核心大小,以像素為單位。

class PIL.ImageFilter.MaxFilter(size: int = 3)[來源]

建立最大濾鏡。在給定大小的視窗中選擇最大的像素值。

參數:

size – 核心大小,以像素為單位。

class PIL.ImageFilter.ModeFilter(size: int = 3)[來源]

建立眾數濾鏡。在給定大小的方塊中選擇最常見的像素值。僅出現一次或兩次的像素值將被忽略;如果沒有像素值出現兩次以上,則保留原始像素值。

參數:

size – 核心大小,以像素為單位。

class PIL.ImageFilter.Filter[來源]

用於篩選影像的抽象混入 (用於 filter())。

實作者必須提供以下方法

filter(self, image)[來源]

將濾鏡應用於單波段影像或影像的單個波段。

傳回值:

影像的篩選副本。

class PIL.ImageFilter.MultibandFilter[來源]

用於篩選多波段影像的抽象混入 (用於 filter())。

實作者必須提供以下方法

filter(self, image)

將濾鏡應用於多波段影像。

傳回值:

影像的篩選副本。