我正在尝试更改黑/白图像中超像素的颜色并保存新的白/黑图像。 我使用 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(对于白色)。
答案 0 :(得分:1)
您实际上可以使用超像素直接索引 y
数组:
mask = y[segments]
或者,如果您想确保获得 0/255 uint8:
yu8 = np.where(y == 1, 255, 0).astype(np.uint8)
mask = yu8[segments]
是的,NumPy 很棒!您可以在此处阅读有关 NumPy 索引的更多信息:
答案 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