# 导入工具包,PIL、numpy、matplotlib
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
# 加载图片,这里加载的是和代码文件在同一目录的1.jpg文件,赋值给img
img = Image.open('./1.jpg')
"""
归一处理,这里是对图片进行向量化操作,是把里面的每一个数都除以255,
这样里面的每一个值就都介于0和1之间了,防止后期imshow报错,
# plt.imshow() 函数并不会自动对输入数据归一化处理,而是对数据取值范围提出要求:
如果是float型数据,取值范围应在[0,1];如果是int型数据,取值范围应在[0,255]
"""
img = np.array(img)/255
# 获得图片维度数据,x代表图片多少行,y代表图片多少列,z等于3分表是rgb三个色彩的值
x,y,z = img.shape
# 显示图片img
plt.imshow(img)
图片实际为[图片行数,图片列数,RGB]的矩阵
RGB三个值代表红绿蓝三色的深浅
print(img1.size) # 调整图片规格尺寸,拉伸 img1 = img1.resize([64,128]) print(img1.size) img1
注意:img1里面存储的是图片,img为矩阵,所以img1显示图片,img显示矩阵数据
# 上下翻转
# 初始化一张同样大小的空图片img1
img1 = np.zeros([x,y,z])
# 按照图片行数,从0开始循环
for n in range(x):
# 新图片img1的第0行等于原图片的最后一行,新图片的第n行等于原图片的x-n-1行
img1[n,:,:] = img[x-n-1,:,:]
# 显示新图片img1
plt.imshow(img1)
# 左右翻转
# 初始化一张同样大小的空图片img1
img2 = np.zeros([x,y,z])
# 按照图片列数,从0开始循环
for n in range(y):
# 新图片img1的第0列等于原图片的最后一列,新图片的第n列等于原图片的x-n-1列
img2[:,n,:] = img[:,y-n-1,:]
# 显示新图片img2
plt.imshow(img2)
# 色彩变换,只显示某一个颜色通道 # 只显示红色 # 初始化一张同样大小的空图片imgr imgr = np.zeros([x,y,z]) imgr[:,:,0] = img[:,:,0] # 显示图片imgr,imshow()方法默认只能显示一张图片,后面再带show()方法就可以显示多个图片了 plt.imshow(imgr) plt.show() # 只显示绿色 # 初始化一张同样大小的空图片imgg imgg = np.zeros([x,y,z]) imgg[:,:,1] = img[:,:,1] plt.imshow(imgg) plt.show() # 只显示蓝色 、# 初始化一张同样大小的空图片imgb imgb = np.zeros([x,y,z]) imgb[:,:,2] = img[:,:,2] plt.imshow(imgb) plt.show()
# 将两张图片融合为一张图片
# 加载图片,这里加载的是和代码文件在同一目录的2.jpg文件,并赋值给img0
img0 = Image.open('./2.jpg')
img0 = np.array(img0)/255
plt.imshow(img0)
plt.show()
imgp = np.zeros([x,y,z])
# 注意这里也是向量化操作,是把两个图片里的每一个值相加
imgp = np.array(img)+np.array(img0)
# 因为两个0到1之间的数相加之后可能大于1,imshow()无法显示,所以再对里面的每一个数除以2
imgp = np.array(imgp)/2
# 显示合成之和的图片
plt.imshow(imgp)
plt.show()
# 初始化一个画布 plt.figure() # 把画布拆分一行三列 fig,ax = plt.subplots(1,3) # 设置画布宽度15 fig.set_figwidth(15) # 显示第一张 ax[0].imshow(imgr) ax[1].imshow(imgg) ax[2].imshow(imgb)



