【神经网络】tensorflow实验5--数字图像基础

目录

1. 实验目的

2. 实验内容

3. 实验过程

题目一:

① 代码

② 实验结果

题目二:

① 代码

② 实验结果

4. 实验小结&讨论题


1. 实验目的

①了解数字图像基本属性;

②掌握Pillow图像处理库的基本操作。

2. 实验内容

①使用Pillow库对图像进行图像色彩模式转换、颜色通道的分离与合并、转化为数组、缩放、旋转、镜像和裁剪等操作;

②将图像转化为多维数组;

③下载MNIST数据集,访问并以图片形式显示数据集中的样本。

3. 实验过程

题目一:

下载lena.tiff图像,将R、G、B三通道分离,采用灰度图表示颜色的亮度,并分别对各个通道按要求进行处理。

 

要求:

(1)将R通道的图像缩小为50×50,显示在子图1中,子标题为:“R-缩放”,字体大小为14;

(2)将G通道的图像先水平镜像,再顺时针旋转90度,显示在子图2中,子标题为:“G-镜像+旋转”,字体大小为14,并显示坐标轴;

(3)对B通道的图像进行裁剪,裁剪位置:左上角(0, 0) 右下角(300,300),显示在子图3中,子标题为:“B-裁剪”,字体大小为14;

(4)将原始的R、G、B通道的图像合并,显示在子图4中,子标题显示图像的色彩模式,字体大小为14;

(5)将要求(4)的处理结果保存为PNG格式的图片,路径为当前工作目录,文件名为“test.png”,如图1所示;

(6)将以上生成的4幅图像显示在2×2的画布中,全局标题为“图像基本操作”,标题字体大小为20,颜色为蓝色,如图2所示。

图1 图像保存

 

图2 图像显示

① 代码

from PIL import Image

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'

plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号

img = Image.open("lena.tiff")

img_r,img_g,img_b = img.split() #将彩色图像分离为R,G,B三个颜色通道。

plt.figure(figsize=(5,5))   #整体画布大小5*5

# (1)将R通道的图像缩小为50×50,显示在子图1中,子标题为:“R-缩放”,字体大小为14;

plt.subplot(221)   #两行两列第1个图

plt.axis("off")      #不显示坐标轴

img_small = img_r.resize((50,50)) #缩放50*50

plt.imshow(img_small,cmap="gray")   #灰度图

plt.title("R-缩放",fontsize = 14)

# (2)将G通道的图像先水平镜像,再顺时针旋转90度,显示在子图2中,子标题为:“G-镜像+旋转”,字体大小为14,并显示坐标轴;

plt.subplot(222)

plt.axis('on')#显示坐标轴

img_gr = img_g.transpose(Image.ROTATE_270)#逆时针270 = 顺时针90

plt.imshow(img_gr,cmap="gray")

plt.title("G--镜像+旋转",fontsize = 14)



# (3)对B通道的图像进行裁剪,裁剪位置:左上角(0, 0) 右下角(150, 150),显示在子图3中,子标题为:“B-裁剪”,字体大小为14;

plt.subplot(223)

img_region = img_b.crop((0,0,150,150))

plt.imshow(img_region)

plt.title("B-裁剪",fontsize = 14)



# (4)将原始的R、G、B通道的图像合并,显示在子图4中,子标题显示图像的色彩模式,字体大小为14;



img_rgb = Image.merge("RGB",[img_r,img_g,img_b])  #将所有通道合并,得到BGR彩色图像

plt.subplot(224)

plt.axis("off")

plt.imshow(img_rgb)

plt.title("rgb",fontsize = 14)



# (5)将要求(4)的处理结果保存为PNG格式的图片,路径为当前工作目录,文件名为“test.png”,如图2所示;

img_rgb.save('test.png')



#(6)将以上生成的4幅图像显示在2×2的画布中,全局标题为“图像基本操作”,标题字体大小为20,颜色为蓝色。

plt.suptitle("图像基本操作",fontsize = 20,color = 'b')



plt.show()

② 实验结果

题目二:

按下列要求完成程序,随机显示MNIST数据集中的样本,效果如下图所示。

要求:

(1)下载手写数字数据集,读取训练集和测试集数据,放在NumPy数组train_x、train_y、test_x、test_y中;(train_x:训练集图像,train_y:训练集标签,test_x:测试集图像,test_y:测试集标签)

(2)随机从所有测试集数据中显示16幅数字图像;

(3)16幅图像按照4×4方式排列在一张画布中,每幅图像的子标题为该图像的标签值,字体大小为14,全局标题为“MNIST测试集样本”,字体大小为20,颜色为红色。

① 代码

# (1)下载手写数字数据集,读取训练集和测试集数据,放在NumPy数组train_x、train_y、test_x、test_y中;(train_x:训练集图像,train_y:训练集标签,test_x:测试集图像,test_y:测试集标签)

# (2)随机从所有测试集数据中显示16幅数字图像;

# (3)16幅图像按照4×4方式排列在一张画布中,每幅图像的子标题为该图像的标签值,字体大小为14,全局标题为“MNIST测试集样本”,字体大小为20,颜色为红色。

import tensorflow as tf

import numpy as np

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'  #防止中文乱码

plt.rcParams['axes.unicode_minus'] = False #设置正常显示符号

mnist = tf.keras.datasets.mnist

(train_x,train_y),(test_x,test_y) = mnist.load_data()

plt.suptitle("MNIST测试集样本",fontsize = 20,color = 'r')   #总标题

for i in range(16):

    num = np.random.randint(1,50000)

    plt.subplot(4,4,i+1)

    plt.axis("off")    #不显示坐标轴

    plt.imshow(train_x[num])

    plt.title("标签值:"+str(train_y[num]))   #train_y[num]是手写数字值

plt.show()

# print(train_x[0])

# print(train_y[0])

② 实验结果

4. 实验小结&讨论题

① 实验过程中遇到了哪些问题,你是如何解决的?

这次的题目有点难,问了很多同学才得以解决,刚开始图片存储位置不对,不能正常运行,我就把图片存储到我的这个代码的项目文件中,就可以正常显示了。类似于波士顿房价集和鸢尾花,对图片进行处理的时候对一些函数不是很熟练,导致运行会出错。

② 你知道Keras中还集成了哪些其他的数据集吗?请列举一二,并下载出来。除了Keras,你知道其他下载数据集的方式吗?

MNIST数字分类数据集  CIFAR10小图像分类数据集  CIFAR100小图像分类数据集  IMDB电影评论情感分类数据集

1.使用urllib下载cifar-10数据集,并读取再存为图片

2.按BATCH_SIZE读取二进制文件中的图片数据,并存放为jpg

③ 在题目基本要求的基础上,你对每个题目做了那些扩展和提升?或者你觉得在编程实现过程中,还有哪些地方可以进行优化?

每个题目要实现的功能很多,可以使用自定义函数是代码看着简便一点。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值