Python灰度图像转RGB

3
我有一个灰度图像的numpy数组,具有以下属性:
形状=(3524,3022),dtype = float32,min = 0.0,max = 1068.16
使用plt.imshow(gray,cmap ='gray,vmin = 0,vmax = 80)绘制的灰度图像如下:

enter image description here

我想将它转换为RGB格式。我尝试了几种方法,例如np.stack,cv2.merge,cv2.color创建一个3D np.zeros图像,并将每个通道分配给灰度图像。当我绘制3D图像时,我得到非常暗的图像,'blob'根本看不见。 我也尝试将其范围转换为[0,1]或[0,255]范围,但无济于事。
使用np.stack plt.imshow(np.stack((new,)*3,axis = 2)),我得到了这个结果,

enter image description here

我应该做什么?提前谢谢!
2个回答

5

使用cv2.normalize函数并设置norm_type=cv2.NORM_MINMAX是一种图像归一化的方法。它将通过alpha和beta参数将数据拉伸或压缩到0到255范围内,并保存为8位类型。

# normalize
norm = cv2.normalize(gray, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
print(norm.shape, norm.dtype)

# convert to 3 channel
norm = cv2.cvtColor(norm, cv2.COLOR_GRAY2BGR)
print(norm.shape, norm.dtype)
print(np.amin(norm),np.amax(norm))

最后,只需通过图像的最大值进行除法运算,就解决了问题。但是,我使用了您的解决方案来对具有不同动态范围的图像进行归一化,以便进行可视化处理。 - vpap

3
通过将vmin=0,vmax=80传递给plt.imshow,您可以剪切图像并重新缩放。因此,您可以这样做:
gray_normalized = gray.clip(0,80)/80 * 255

# stack:
rgb = np.stack([gray_normalized]*3, axis=2)

cv2.imwrite('output.png', gray_normalized)

谢谢,使用imwrite()查看保存的图像,帮助我很好地理解了发生了什么。 - vpap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接