欢迎访问宙启技术站
智能推送

Python Numpy,mask图像的生成详解

发布时间:2023-05-15 17:55:51

在图像处理中,经常需要通过一些条件来筛选出图像中的某些区域,并将其标记出来。这时候就需要用到mask图像。mask图像是将选定的区域标记出来的一张图像,通常用黑白两种颜色表示被选中和未被选中的区域。在Python中,使用numpy库可以方便地生成mask图像。

生成mask图像的关键是如何确定哪些像素点符合选定的条件,需要被标记为选中区域。可以使用numpy库提供的逻辑运算符来实现此功能。

1. 生成mask图像基础

首先,我们需要创建一张需要标记的图像。这里,我们使用numpy库生成一个一维的随机数组作为测试数据,并通过reshape函数转为二维图像,代码如下:

import numpy as np
import cv2

# 创建一张随机图像作为测试数据
img = np.random.randint(0, 255, (200, 200)).astype(np.uint8)

# 原始图像
cv2.imshow("Original", img)
cv2.waitKey(0)

生成的随机图像如下图所示:

![Orginal Image](https://img-blog.csdn.net/20180324010138441)

接下来,我们需要创建一个与原始图像大小相同的全零数组作为mask图像。全零数组表示所有像素点都没有被选中,代码如下:

# 创建与原始图像大小相同的全零二维数组作为mask图像
mask = np.zeros_like(img)

接下来,让我们将这个mask图像变得有意义,以实现我们的目标。

2. 筛选图像像素点

为了实现mask图像的目标,我们需要确定哪些像素点符合选定的条件,需要被标记为选中区域。我们可以使用numpy库提供的逻辑运算符来实现此功能,代码如下:

# 找出所有值大于阈值的像素点
indices = img > 100

# 将所有符合条件的像素点标记为选中区域(1代表选中,255代表白色)
mask[indices] = 1

这里,我们选择了阈值为100。所有值大于100的像素点都会被选中。通过这些简单的步骤,我们就可以创建一张mask图像。完整代码如下:

import numpy as np
import cv2

# 创建一张随机图像作为测试数据
img = np.random.randint(0, 255, (200, 200)).astype(np.uint8)

# 原始图像
cv2.imshow("Original", img)
cv2.waitKey(0)

# 创建与原始图像大小相同的全零二维数组作为mask图像
mask = np.zeros_like(img)

# 找出所有值大于阈值的像素点
indices = img > 100

# 将所有符合条件的像素点标记为选中区域(1代表选中,255代表白色)
mask[indices] = 1

# 显示mask图像
cv2.imshow("Mask", mask*255)
cv2.waitKey(0)

生成的mask图像如下图所示:

![Mask Image](https://img-blog.csdn.net/20180324010732852)

通过mask图像,我们可以方便地筛选出图像中的需要标记的区域,并进行进一步的操作,例如修改像素值,图像裁剪等等。