Python Pillow 简明教程

Python Pillow - Embossing Images

通常, embossing 用于在纸张或卡片纸上创建浮雕图像,以实现三维外观,英国邮政服务在 19 世纪就曾用它为邮票增添优雅气息。此过程包括提升图像、设计或文本的某些部分,以创建三维效果。

在图像处理和计算机图形学中, image embossing 是一种技术,其中图像中的每个像素都根据原始图像的明暗边界转换成加亮版本或阴影版本。对比度较低的位置将替换为灰色背景。生成的浮雕图像有效地表示了原始图像中每个位置的颜色变化率。对图像应用浮雕滤镜通常会生成输出,其类似于原始图像的纸张或金属浮雕呈现效果,因此得名。

Python 的 Pillow 库在 ImageFilter 模块中提供了一些标准图像滤镜,通过调用 image.filter() 方法对图像执行不同的滤镜操作。在本教程中,我们将看到 ImageFilter 模块提供的浮雕滤镜的工作原理。

Applying ImageFilter.EMBOSS kernel filter with the Image.filter() method

ImageFilter.EMBOSS 滤镜是 Pillow 库当前版本中可用的内置滤镜选项之一,用于在图像中创建浮雕效果。

以下是如何应用图像浮雕的步骤 −

  1. 使用 Image.open() 函数加载输入图像。

  2. 对加载的图像对象应用 filter() 函数,并将 ImageFilter.EMBOSS 作为函数的参数提供。该函数将以 PIL.Image.Image 对象的形式返回浮雕图像。

Example

下面是一个使用 Image.filter() 方法与 ImageFilter.EMBOSS 内核滤镜的示例。

from PIL import Image, ImageFilter

# Load an input image
input_image = Image.open("Images/TP logo.jpg")

# Apply an emboss effect to the image
embossed_result = input_image.filter(ImageFilter.EMBOSS)

# Display the input image
input_image.show()

# Display the modified image with the emboss effect
embossed_result.show()
tp logo image

输出经过浮雕滤镜处理的图像 −

imagefilter emboss

Customizing the EMBOSS filter to add depth and azimuth to the embossed image

在 Pillow 库的源代码中,我们可以在“ImageFilter.py”模块中观察到 EMBOSS 类。此类表示浮雕滤镜,并提供了一种在图像上创建浮雕效果的基本方法。

# Embossing filter.
class EMBOSS(BuiltinFilter):
   name = "Emboss"
   # fmt: off
   filterargs = (3, 3), 1, 128, (
      -1, 0, 0,
      0,  1, 0,
      0,  0, 0,
   )

此滤镜通过逐像素对图像应用矩阵来工作。该矩阵包含决定应用于每个像素的转换值的变量。通过修改矩阵,你可以控制浮雕效果的方位角和强度。

该矩阵是一个 3x3 网格,其中每个元素对应于当前像素及其周围像素。中央值表示正在处理的当前像素。此滤镜根据这些值在矩阵中的权重将它们组合起来,以创建转换后的像素。你可以通过调整影响效果整体强度的 scale 和 offset 参数来定制此滤镜。

Example

下面是一个示例,演示如何对图像应用自定义浮雕滤镜,它允许你通过调整各种参数来控制浮雕效果的外观。

from PIL import Image, ImageFilter

# Open the input image
image = Image.open('Images/TP logo.jpg')

# modify the filterargs such as scale, offset and the matrix
ImageFilter.EMBOSS.filterargs=((3, 3), 2, 150, (0, 0, 0, 0, 1, 0, -2, 0, 0))

# Apply an emboss effect to the image
embossed_result = image.filter(ImageFilter.EMBOSS)

# Display the input image
image.show()

# Display the modified image with the emboss effect
embossed_result.show()
tp logo image

使用 Gemini 自定义浮雕效果输出过滤的图象 −

emboss effect