更改python中超像素的颜色

时间:2021-06-18 13:53:53

标签: python numpy image-processing scikit-image

我正在尝试更改黑/白图像中超像素的颜色并保存新的白/黑图像。 我使用 slic 进行超像素算法:

segments = slic(img, n_segments = 100, sigma = 5)

我尝试从段中遍历每个独特的超像素,并将白色设置为 255,黑色设置为 0。 此外,我有一个数组 y,其中包含 0 和 1 的值。此 y 数组的长度与唯一超像素的数量相同,并且超像素的新颜色与此数组相关. 这是我尝试过的:

for i in np.unique(segments):
    mask = np.zeros(image.shape[:2], dtype="uint8")
    if y[i] == 1:
        mask[segments == i] = 255

因此,如果来自 i 的位置 y 处的值是 1,那么“i”超像素应该具有白色。否则,超像素应该是黑色的。

上面的代码不起作用,我没有错误,但是掩码中的所有值都是 0,而且应该还有一些 255(对于白色)。

2 个答案:

答案 0 :(得分:1)

您实际上可以使用超像素直接索引 y 数组:

mask = y[segments]

或者,如果您想确保获得 0/255 uint8:

yu8 = np.where(y == 1, 255, 0).astype(np.uint8)
mask = yu8[segments]

是的,NumPy 很棒!您可以在此处阅读有关 NumPy 索引的更多信息:

https://numpy.org/doc/stable/reference/arrays.indexing.html

答案 1 :(得分:0)

这对我有用:

vis = np.zeros(image.shape[:2], dtype="uint8")
for ii in np.unique(segments):
    # construct a mask for the segment
    print("[x] inspecting segment {}, for {}".format(ii, 57))
    mask2 = np.ones(image.shape[:2], dtype="uint8")
    if pred[ii] == 1:
        mask2[segments == ii] = 255
        vis[segments == ii] = 255