为何设置cmap='Greys'对彩色图像无效?仅改颜色映射无法转黑白?
彩色图像设置cmap='Greys'无效的原因及解决方法
问题1:为何设置cmap='Greys'对彩色图像没有任何作用?
Matplotlib的cmap(颜色映射)参数只针对单通道灰度图像生效,而你读取的是RGB彩色图像——每个像素由R、G、B三个数值组合而成。imshow遇到多通道图像时,会直接按照RGB通道的数值渲染对应颜色,完全忽略你设置的cmap参数,自然看不到灰色效果。
问题2:为何仅修改颜色映射无法将彩色图像转换为黑白图像?
黑白(灰度)图像的本质是单通道数据,每个像素只有一个代表亮度的数值(0-255范围);而彩色图像是三通道结构,你修改cmap只是告知程序“如果是单通道数据就用灰色显示”,但原图像的三通道彩色数据根本没发生变化,imshow还是会按RGB规则渲染,当然转不成黑白。
修正代码示例
要实现黑白显示,得先把三通道彩色图转成单通道灰度图,再配合cmap='Greys'(其实转成灰度图后不用cmap也能显示灰色,加上参数更明确):
import matplotlib.pyplot as plt from matplotlib.image import imread # 读取彩色图像 img = imread('https://cdn.shopify.com/s/files/1/1257/7487/articles/bee-flower_1024x.jpg?v=1585344606') # 用标准加权公式将RGB转为灰度 gray_img = 0.2989 * img[:, :, 0] + 0.5870 * img[:, :, 1] + 0.1140 * img[:, :, 2] plt.imshow(gray_img, cmap='Greys') plt.colorbar() plt.xticks([]) plt.yticks([]) plt.show()
内容的提问来源于stack exchange,提问作者yaodao vang
相关产品推荐
相关产品推荐

