为了账号安全,请及时绑定邮箱和手机立即绑定

如何将RGB图像(3通道)转换为灰度(1通道)并保存?

如何将RGB图像(3通道)转换为灰度(1通道)并保存?

偶然的你 2021-07-07 14:07:08
使用深度学习项目,我有很多图像,不需要颜色。我救了他们做:import matplotlib.pyplot as pltplt.imsave('image.png', image, format='png', cmap='gray')但是后来当我检查图像的形状时,结果是:import cv2img_rgb = cv2.imread('image.png')print(img_rgb.shape)(196,256,3)所以即使我查看的图像是灰度的,我仍然有 3 个颜色通道。我意识到我必须做一些代数运算才能将这 3 个通道转换为 1 个单通道。我已经尝试了线程“如何在 Python 中将 RGB 图像转换为灰度? ”中描述的方法,但我很困惑。例如,何时使用以下方法进行转换:from skimage import colorfrom skimage import ioimg_gray = color.rgb2gray(io.imread('image.png'))plt.imsave('image_gray.png', img_gray, format='png')但是,当我加载新图像并检查其形状时:img_gr = cv2.imread('image_gray.png')print(img_gr.shape)(196,256,3)我在该线程上尝试了其他方法,但结果相同。我的目标是获得具有 (196,256,1) 形状的图像,考虑到卷积神经网络的计算强度会降低多少。
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

你的第一个代码块:


import matplotlib.pyplot as plt

plt.imsave('image.png', image, format='png', cmap='gray')

这是将图像保存为 RGB,因为cmap='gray'在向 imsave 提供 RGB 数据时会被忽略(请参阅pyplot 文档)。


您可以通过取三个波段的平均值将您的数据转换为灰度,您可以使用color.rgb2gray,或者我倾向于使用 numpy:


import numpy as np

from matplotlib import pyplot as plt

import cv2


img_rgb = np.random.rand(196,256,3)

print('RGB image shape:', img_rgb.shape)


img_gray = np.mean(img_rgb, axis=2)

print('Grayscale image shape:', img_gray.shape)

输出:


RGB image shape: (196, 256, 3)

Grayscale image shape: (196, 256)

img_gray现在是正确的形状,但是如果您使用 保存它plt.imsave,它仍然会写入三个波段,每个像素的 R == G == B。这是因为,我相信,一个 PNG 文件需要三个(或四个)波段。警告:我不确定这一点:我希望得到纠正。


plt.imsave('image_gray.png', img_gray, format='png')

new_img = cv2.imread('image_gray.png')

print('Loaded image shape:', new_img.shape)

输出:


Loaded image shape: (196, 256, 3)

避免这种情况的一种方法是将图像保存为 numpy 文件,或者确实将一批图像保存为 numpy 文件:


np.save('np_image.npy', img_gray)

new_np = np.load('np_image.npy')

print('new_np shape:', new_np.shape)

输出:


new_np shape: (196, 256)

您可以做的另一件事是保存灰度 png(使用imsave),然后只在第一个波段中读取:


finalimg = cv2.imread('image_gray.png',0)

print('finalimg image shape:', finalimg.shape)

输出:


finalimg image shape: (196, 256)


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 547 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信