栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

图像数据与运算基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图像数据与运算基础

导入显示图片,图片转矩阵
# 导入工具包,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显示矩阵数据

numpy处理图片矩阵
# 上下翻转

# 初始化一张同样大小的空图片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画布设置
# 初始化一个画布
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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号