更改 python 中超像素的颜色

change the color of superpixels in python

我正在尝试更改 black/white 中图像的超像素颜色并保存新的 white/black 图像。 我使用切片作为超像素算法:

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

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

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

因此,如果 y 位置 i 处的值为 1,则“i”超像素的颜色应为白色。否则,超像素应该是黑色的。

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

这对我有用:

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 

你实际上可以用你的超像素直接索引 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