从 1 通道阵列到 3 通道,带 if 条件



img是一个彩色图像(3个通道的数组(。

img_sc一个与img大小相同但有 1 个通道的零数组。

此操作将 RGB 图像(包含 5 个类的分割图像(的颜色映射到包含类 ID 的 ID 图像中:

img_sc[np.logical_and(np.logical_and(img[:,:,0]==170,img[:,:,1]==170),img[:,:,2]==170)] = 1
img_sc[np.logical_and(np.logical_and(img[:,:,0]==0,img[:,:,1]==255),img[:,:,2]==0)] = 2

换句话说,在分段图像中,道路是灰色的(170,170,170(,它的类ID是1,草是(0,255,0(,它的ID是2,依此类推,所以不是有彩色像素的图像,我有一个1个通道的数组,只包含ID。

我需要做与此操作相反的操作,并转换包含 ID 的 1 通道数组,如下所示:

[[3 3 3 ... 4 4 4]
[3 3 3 ... 4 4 4]
[3 3 3 ... 4 4 4]
...
[3 3 3 ... 2 2 2]
[3 3 3 ... 2 2 2]
[3 3 3 ... 2 2 2]]

变成包含 RGB 颜色的 3 通道数组:

[[[102 102  51]
[102 102  51]
[102 102  51]
...
[  0 120 255]
[  0 120 255]
[  0 120 255]]
[[102 102  51]
[102 102  51]
[102 102  51]
...
[  0 120 255]
[  0 120 255]
[  0 120 255]]
[[102 102  51]
[102 102  51]
[102 102  51]
...
[  0 120 255]
[  0 120 255]
[  0 120 255]]
...
[[102 102  51]
[102 102  51]
[102 102  51]
...
[  0 255   0]
[  0 255   0]
[  0 255   0]]
[[102 102  51]
[102 102  51]
[102 102  51]
...
[  0 255   0]
[  0 255   0]
[  0 255   0]]
[[102 102  51]
[102 102  51]
[102 102  51]
...
[  0 255   0]
[  0 255   0]
[  0 255   0]]]
h, w, c = img.shape
out = np.zeros((h,w,c))
out[class[:, :] == 1, :] = [170, 170, 170]
out[class[:, :] == 2, :] = [0, 255, 0]

可能有效,或

h, w, c = img.shape
out = np.zeros((h,w,c))
out[class[:, :] == 1, 0] = 170
out[class[:, :] == 1, 1] = 170
out[class[:, :] == 1, 2] = 170
out[class[:, :] == 2, 1] = 255
arr = np.stack((arr,)*3, axis=-1)
arr[np.where((arr == 1).all(axis=2))] = [170, 170, 170]

最新更新