Matplotlib 简明教程

Matplotlib - Image Masking

在 Matplotlib 库中,图像遮罩涉及根据指定掩码有选择地显示图像的部分,该掩码本质上是定义要显示或隐藏的区域的二进制图像。它允许我们应用过滤器或条件以显示或隐藏图像的特定部分。

Process of Image Masking

以下是执行图像遮罩的步骤:

Create a Mask

  1. 定义创建遮罩的条件或模式。它可以基于颜色、形状、渐变或特定像素值。

Apply the Mask

  1. 使用遮罩修改原始图像中相应像素的透明度或可见性。与遮罩中定义为 "masked" 的区域相对应的像素通常隐藏或变为透明,而其他像素则保持可见。

Overlay or Blend

  1. 将遮罩图像叠加或混合到另一图像或背景中,仅显示未遮罩的部分。可以将遮罩图像叠加到另一图像上以组合并显示可见区域。

Types of Image Masks

以下是图像遮罩的类型:

Binary Masks

  1. 由黑色和白色像素组成,其中白色代表可见区域,黑色代表遮罩区域。

Grayscale Masks

  1. 使用各种深浅的灰色来定义透明度或部分可见性的级别。

Tools and Techniques for Image Masking

我们可以使用不同的工具和技术进行图像遮罩。

Manual Masking

  1. 像 Photoshop 或 GIMP 这样的工具允许用户使用选择工具、画笔或图层蒙版手动创建和编辑遮罩。

Programmatic Masking

  1. 在使用 OpenCV 或 PIL (Pillow) 等库的 Python 等编程语言中,我们可以使用基于颜色阈值、轮廓或特定图像特征的算法创建遮罩。

Key Points

  1. 在 Matplotlib 中进行图像遮罩涉及创建一个与图像具有相同尺寸的遮罩阵列,其中标记了特定区域以隐藏(遮罩)或显示(取消遮罩)图像的部分。

  2. 遮罩阵列包含布尔值或数值,其中 True 或非零值表示要显示的区域,而 False 或零值表示要隐藏的区域。

  3. 遮罩允许基于指定的条件或标准对图像的特定部分进行选择性可视化或操作。

Masking the particular region of the Image

假设我们有一张图像,并希望遮罩特定区域,仅基于某些标准显示图像的一部分。

import matplotlib.pyplot as plt
import numpy as np

# Create a sample image (random pixels)
image = np.random.rand(100, 100)

# Create a mask to hide certain parts of the image
mask = np.zeros_like(image)
mask[30:70, 30:70] = 1  # Masking a square region

# Apply the mask to the image
masked_image = np.ma.masked_array(image, mask=mask)

# Display the original and masked images
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(masked_image, cmap='gray')
plt.title('Masked Image')
plt.axis('off')
plt.show()
image masking

Applying mask to an Image

在本文中,这是使用 matplotlib 库遮罩图像的另一种方法。

import matplotlib.pyplot as plt
import numpy as np

# Create a sample image
image_size = 100
img = np.zeros((image_size, image_size, 3), dtype=np.uint8)
img[:, :image_size // 2] = [255, 0, 0]  # Set the left half to blue

# Create a binary mask
mask = np.zeros((image_size, image_size), dtype=np.uint8)
mask[:, image_size // 4:] = 1  # Set the right quarter to 1

# Apply the mask to the image
masked_img = img * mask[:, :, np.newaxis]

# Display the original image, mask, and the masked image
plt.figure(figsize=(12, 4))
plt.subplot(131)
plt.imshow(img)
plt.title('Original Image')
plt.axis('off')
plt.subplot(132)
plt.imshow(mask, cmap='gray')
plt.title('Mask')
plt.axis('off')
plt.subplot(133)
plt.imshow(masked_img)
plt.title('Masked Image')
plt.axis('off')
plt.show()
applying image masking