如何将图像的像素值复制到另一个 python 变量以使该 python 变量在 opencv 中保存图像

how to copy pixel values of an image to another python variable to make that python variable hold the image in opencv

我使用 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 颜色值,我需要将它们转换成图像。所以我不能只复制粘贴。

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

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

然后,将完整的图像着色为另一种颜色,您可以使用切片方法而不是遍历所有像素,速度会很快。

像这样:

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

您遇到的问题是因为您在创建遮罩图像时没有指定数据类型。因此,它默认使用 float 作为其数据类型,那么颜色的范围将在 0-1 之间。当您传递大于 1 的值时,它会将其视为该颜色的完整强度。因此,完整的白色和蓝色图像出现了。

此外,如果您想复制图像,请使用:

mask = image.copy()