使用Numpy将彩色图片绘图成红,绿,蓝后,使用matplotlib库配合Numpy库输出2d绘图

索引和切片
索引:书的页码,为了快速查找。
切片:选取书的某一页到另外一页之间的内容。

数组的索引与切片,同 列表的索引和切片。

# 1张彩图,颜色通道剥离,并且呈现出颜色
from PIL import Image
import numpy as np
# 1 读图
im = Image.open("bdd.jpg")   # PIL对象
#im.show()
im.size                      # 宽度=1024像素(1024列),高度=683像素(683行)
# 2 PIL对象转成数组
im_a = np.asarray(im)       # 数组
im_a.shape                  # 数组的形状:683行 1024列 3层

# 3 基于数组,颜色通道的剥离 = 2轴上切片
im_a_c1 = im_a[:,:,0]  # 红色通道的数据 剥离出来
im_a_c1.shape

im_a_c2 = im_a[:,:,1]  # 绿色通道的数据,二维数组
im_a_c3 = im_a[:,:,2]  # 蓝色通道的数据,二维数组
#4.拼接:将单层颜色通道数组+2层的全0数组
#4.1 生成1个 3维全0数组, 1轴 = 原图的值,2轴 = 2层
zeros = np.zeros((im_a.shape[0],im_a.shape[1],2))
zeros.shape
#4.2 先给颜色通道数组升维,再和全0数组拼接
#升维方法1:np.newaxis
im_a_c1 = im_a_c1[:,:,np.newaxis]  #升维1维 ,变成了3维数组
im_a_c1 = np.concatenate((im_a_c1,zeros),axis = 2)
im_a_c1.shape

#ff方法2:直接赋值
#先生成3层的全0数组,对应颜色通道层,使用赋值,获得原图对应层的值
zeros = np.zeros(im_a.shape)  #3层全0数组
zeros[:,:,1] = im_a_c2
im_a_c2 = zeros

zeros_3 = np.zeros(im_a.shape)
zeros_3[:,:,2] = im_a_c3 # 把蓝色单层,赋值给全0数组的最后一层
im_a_c3 = zeros_3

 

#matplotlib库就是配合Numpy库的2d绘图库
from matplotlib import pyplot as plt
import matplotlib



plt.subplot(2,2,1)         #2行2列的子图结构
plt.title("origin Image")
plt.imshow(im_a)
plt.axis('off')  #关掉坐标轴

plt.subplot(2,2,2)         #2行2列的子图结构
plt.title("Red Channel")
plt.imshow(im_a_c1.astype('uint8')) #验证:去掉astype(‘uint8’)
plt.axis('off')  #关掉坐标轴

plt.subplot(2,2,3)         #2行2列的子图结构
plt.title("Green Channel")
plt.imshow(im_a_c2.astype('uint8'))
plt.axis('off')  #关掉坐标轴

plt.subplot(2,2,4)         #2行2列的子图结构
plt.title("Blue Channel")
plt.imshow(im_a_c3.astype('uint8'))
plt.axis('off')  #关掉坐标轴

plt.savefig("./rgb_2101.png",dpi = 485)

相关图如下:

 

#中字标题
from matplotlib import pyplot as plt
import matplotlib


使用中文标注

#matplotlib库就是配合Numpy库的2d绘图库
from matplotlib import pyplot as plt
import matplotlib


zhfont = matplotlib.font_manager.FontProperties(fname = "SourceHanSansSC-Bold.otf")

plt.subplot(2,2,1)         #2行2列的子图结构
plt.title("原图",fontproperties = zhfont)
plt.imshow(im_a)
plt.axis('off')  #关掉坐标轴

plt.subplot(2,2,2)         #2行2列的子图结构
plt.title("红色通道",fontproperties = zhfont)
plt.imshow(im_a_c1.astype('uint8')) #验证:去掉astype(‘uint8’)
plt.axis('off')  #关掉坐标轴

plt.subplot(2,2,3)         #2行2列的子图结构
plt.title("绿色通道",fontproperties = zhfont)
plt.imshow(im_a_c2.astype('uint8'))
plt.axis('off')  #关掉坐标轴

plt.subplot(2,2,4)         #2行2列的子图结构
plt.title("蓝色通道",fontproperties = zhfont)
plt.imshow(im_a_c3.astype('uint8'))
plt.axis('off')  #关掉坐标轴

plt.savefig("./rgb_2101.png",dpi = 50)

 如果没有astype(‘uint8’)代码的后果:

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值