0

我使用 np.zeros 创建了一个黑色图像:

mask = np.zeros((800, 500, 3))

面具

现在我想编辑这个名为 mask 的变量,把它变成我喜欢的图像。我知道我可以像这样访问像素值:

for i in range(0,800):
 for j in range(0,500):
    mask[i,j]=[110,23,245]

但这不起作用,因为输出是白色图像:

白色图像

如果我只使用这样的单个值。它给了我一个蓝色的图像:

蓝色图像

但我没有使用 255,它不应该给我像 255 像素值这样的完整深蓝色图像:

for i in range(0,800):
    for j in range(0,500):
        mask[i,j]=[110,0,0]

我知道我可以像这样复制图像:

mask=image

但是我正在做的事情是我在 3 个二维数组中有 r、g、b 颜色的值,我需要将它们转换为图像。所以我不能只是复制粘贴。

4

1 回答 1

1

首先,在创建黑色图像时还要指定数据类型:

mask = np.zeros((800, 500, 3), dtype=np.uint8)

然后,要将整个图像着色为另一种颜色,您可以使用切片方法而不是迭代所有像素,它会很快。

像这样:

mask[:, :] = (110,23,245)

由于您在创建掩码图像时没有指定数据类型,因此出现了您的问题。因此,它默认使用 float 作为其数据类型,然后颜色的范围将在 0-1 之间。当您传递大于 1 的值时,它会将其作为该颜色的全部强度。因此,出现了完整的白色和蓝色图像。

而且,如果你想复制一个图像,使用这个:

mask = image.copy()
于 2020-07-18T05:41:35.880 回答