所以,你想用不同的颜色显示图像的不同RGB通道。。。import matplotlib.pyplot as plt
from matplotlib.cbook import get_sample_data
image = plt.imread(get_sample_data('grace_hopper.jpg'))
titles = ['Grace Hopper', 'Red channel', 'Green channel', 'Blue channel']
cmaps = [None, plt.cm.Reds_r, plt.cm.Greens_r, plt.cm.Blues_r]
fig, axes = plt.subplots(1, 4, figsize=(13,3))
objs = zip(axes, (image, *image.transpose(2,0,1)), titles, cmaps)
for ax, channel, title, cmap in objs:
ax.imshow(channel, cmap=cmap)
ax.set_title(title)
ax.set_xticks(())
ax.set_yticks(())
plt.savefig('RGB1.png')
注意,当你有一个黑暗的房间,黑暗的桌子上有一支红色的钢笔,如果你打开一盏红色的灯,你会感觉到钢笔几乎是白色的。。。
另一种可能是为每种颜色创建不同的图像,其他颜色的像素值变为零。从我们离开的地方开始,我们定义了一个函数,将一个通道提取到另一个黑色图像中...
from numpy import array, zeros_like
def channel(image, color):
if color not in (0, 1, 2): return image
c = image[..., color]
z = zeros_like(c)
return array([(c, z, z), (z, c, z), (z, z, c)][color]).transpose(1,2,0)
最后用它。。。colors = range(-1, 3)
fig, axes = plt.subplots(1, 4, figsize=(13,3))
objs = zip(axes, titles, colors)
for ax, title, color in objs:
ax.imshow(channel(image, color))
ax.set_title(title)
ax.set_xticks(())
ax.set_yticks(())
plt.savefig('RGB2.png')
我不知道我更喜欢哪一个版本,也许第一个版本对我来说更真实(也许看起来不那么人为),但它很主观。。。