📜  使用 Python-Pillow 填充图像

📅  最后修改于: 2022-05-13 01:54:35.485000             🧑  作者: Mango

使用 Python-Pillow 填充图像

种子填充也称为洪水填充,是一种用于识别特定封闭区域中连接路径的算法。该算法具有一系列实际应用,例如 -

  • 优化寻路
  • Paint Bucket Tool 是在多个图像处理包中发现的通用工具,内部使用该算法
  • Mazesolving 使用 Floodfill(与广度优先、深度优先等遍历算法和 A Star、Dijkstra 等寻路算法配对)
  • 用于图像处理

可以通过多种方式实现该算法,例如-

  • 扫描线填充(基于行/列的填充)
  • 四/八路填埋场
  • 阈值较少的 Floodfill(仅使用相同的像素值)

我们将利用洪水填充算法来完成图像处理任务。为此,我们将使用pillow库。要安装库,请在命令行中执行以下命令:-

pip install pillow

注意:一些 Linux 发行版倾向于预装Python和 Pillow

例子:

使用的图像:
示例图像

# Importing the pillow library's 
# desired modules
from PIL import Image, ImageDraw
   
# Opening the image (R prefixed to
# string in order to deal with '\'
# in paths)
img = Image.open(R"sample.png")
  
# Converting the image to RGB mode
img1 = img.convert("RGB") 
  
# Coordinates of the pixel whose value
# would be used as seed
seed = (263, 70)
   
# Pixel Value which would be used for
# replacement 
rep_value = (255, 255, 0)
   
# Calling the floodfill() function and 
# passing it image, seed, value and 
# thresh as arguments
ImageDraw.floodfill(img, seed, rep_value, thresh=50)
   
# Displaying the image
img.show()

输出:
输出

解释:

  • 在导入任务所需的必要模块后,我们首先创建一个图像对象( 'PIL.Image.Image' )。此图像对象充当图像文件的单独核心副本,可以单独使用。
  • 然后为种子变量分配一个坐标值(图像的内部尺寸)。坐标是手动选取的,即用户应该输入有意选取的坐标值(像素坐标值可以通过使用img.getpixel(coord)来验证)。
  • 从这些坐标获得的像素值将是图像内部要替换的像素值。
  • 然后rep_value变量分配一个 RGB 颜色值(在本例中为黄色)。该值被分配为 RGB 元组,这对于我们的特定情况是特定的,因为我们的输入图像是 RGB 颜色空间( img.mode == 'RGB' )。

    注意: rep_value 变量将根据当前图像的图像模式包含值,即如果img.mode == "L"则 rep 值将不是具有 3 个分量的元组,而是整数。

  • 然后通过传递 img、seed、rep_value 和 thresh 作为参数调用ImageDraw.floodfill()函数。由于ImageDraw.floodfill()函数在原地修改了传递的图像对象,因此我们不需要存储函数的返回值(Nonetype)。
  • 最后,我们使用img.show() ( Image.show() ) 显示修改后的图像。