将灰度图像转换为3通道图像

Dyl*_*lan 29 python numpy

我想将具有形状的灰度图像转换为具有形状(height,width)的3通道图像(height,width,nchannels).工作是用a完成的for-loop,但必须有一个简洁的方法.这是程序中的一个代码,有人可以给出一个提示.请指教.

 30         if img.shape == (height,width): # if img is grayscale, expand
 31             print "convert 1-channel image to ", nchannels, " image."
 32             new_img = np.zeros((height,width,nchannels))
 33             for ch in range(nchannels):
 34                 for xx in range(height):
 35                     for yy in range(width):
 36                         new_img[xx,yy,ch] = img[xx,yy]
 37             img = new_img
Run Code Online (Sandbox Code Playgroud)

Chr*_*ler 62

您可以使用np.stack以更简洁地完成此任务:

img = np.array([[1, 2], [3, 4]])
stacked_img = np.stack((img,)*3, axis=-1)
print(stacked_img)
 # array([[[1, 1, 1],
 #         [2, 2, 2]],
 #        [[3, 3, 3],
 #         [4, 4, 4]]])
Run Code Online (Sandbox Code Playgroud)

  • 首先,它不是“(w,h,...)”,而是“(h​​,w,...)”。其次,OP的问题有形状为“(w,h)”的图像,而不是“(w,h,1)”,所以发布的解决方案是完全正确的。第三,如果你有形状为“(w,h,1)”的图像,你可以使用“np.concatenate”代替“np.stack”,你会得到你想要的结果,即“np.concatenate((img, )*3,轴=-1)`。 (5认同)
  • 我认为OP期望`[ [[1 1 1][2 2 2]] [[3 3 3][4 4 4]]]` (2认同)