如何在Matplotlib中反转RGB格式MNIST图像的颜色(白黑转黑白)
解决MNIST RGB图像颜色反转问题
问题原因
Matplotlib的cmap参数仅对单通道2D数组(灰度图)生效,当传入3D的RGB数组时,会直接按RGB通道的原始像素值渲染,完全忽略cmap设置,所以用gray_r反转无效。
两种解决方法
方法1:将RGB图转为单通道灰度图后反转
因为MNIST的RGB图像三个通道的像素值完全一致(本质是灰度图转成了RGB格式),所以可以直接取任意一个通道,或用标准灰度转换公式生成单通道图,再用gray_r反转:
import numpy as np import matplotlib.pyplot as plt # 假设image_2是(28,28,3)的RGB数组 # 方式A:直接取单个通道(MNIST专属快捷方式) gray_img = image_2[:, :, 0] plt.imshow(gray_img, cmap='gray_r') plt.show() # 方式B:标准灰度转换(适用于所有RGB图) gray_img = np.dot(image_2[..., :3], [0.2989, 0.5870, 0.1140]) plt.imshow(gray_img, cmap='gray_r') plt.show()
方法2:直接反转RGB像素值
如果不想转灰度,直接对RGB图像的每个像素值做减法反转即可:
import matplotlib.pyplot as plt # 情况1:图像像素值是0-255的uint8类型 inverted_img = 255 - image_2 plt.imshow(inverted_img) plt.show() # 情况2:图像像素值是0-1的float类型 inverted_img = 1.0 - image_2 plt.imshow(inverted_img) plt.show()
内容的提问来源于stack exchange,提问作者stackbiz
相关产品推荐
相关产品推荐

