索引和切片
索引:书的页码,为了快速查找。
切片:选取书的某一页到另外一页之间的内容。
数组的索引与切片,同 列表的索引和切片。
# 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’)代码的后果: