18. 深度学习——图像的读取(笔记)
1. 图像基本知识像素值就是特征值单通道:每一个像素一个值,叫灰度值在[0~255]之间,三通道,每个像素点3个值。4-D张量是 [样本数,height, width, channels]缩放图片⼤小:减少像素的量;统⼀图⽚的⼤小,去进⾏算法识别。2. 图像基本操作API3.案例狗图片读取1、构造图片文件队列2、构造图片阅读器3、读取图片数据4、处理图片数据代码:import tensorflow
1. 图像基本知识
像素值就是特征值
单通道:每一个像素一个值,叫灰度值在[0~255]之间,三通道,每个像素点3个值。
4-D张量是 [样本数,height, width, channels]
缩放图片⼤小:减少像素的量;统⼀图⽚的⼤小,去进⾏算法识别。
2. 图像基本操作API
3.案例
狗图片读取
1、构造图片文件队列
2、构造图片阅读器
3、读取图片数据
4、处理图片数据
代码:
import tensorflow as tf
import os
main_path = "F:/文本文件数据/狗图片/"
# 导入数据的准备
file_name = os.listdir(main_path)
# print(file_name) # 以列表的形式列出文件的名字
# 完整路径
file_list = [main_path+x for x in file_name]
# print(file_list)
# 1.构建文件的队列
file_queue = tf.train.string_input_producer(file_list)
# 2.构造阅读器读取队列数据(默认读取一张图片)
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
print(value)
# 3.对每一个图片进行解码
image = tf.image.decode_jpeg(value)
print(image)
# 4.统一图片大小
image_resize = tf.image.resize_images(image,[200,200])
print(image_resize)
# 5.批处理
image_batch = tf.train.batch([image_resize], batch_size=20, num_threads=1, capacity=20)
print(image_batch)
结果:
ValueError: All shapes must be fully defined: [TensorShape([Dimension(200), Dimension(200), Dimension(None)])]
做完批处理后,打印批处理后的结果,报错,意思是没有确定形状没有固定,可以看到3-D的张量长宽固定了是200x200但是通道数没有固定。但是又有一个问题,为啥之前形状都是问号没有固定并没有报错。原因是因为RGB有三个值,比如一张图片是很多像素点组成,有很多R值,G值,B值,当一张图片放入队列中相当于放了3张数字表进去(R,G,B),现在批处理,一下子放了好多图片进去,每张图片,有3张表,但是计算机并不知道你传的是彩色图还是灰度图,也就不知道一张图片有几张表,所以产生报错。
在批处理之前固定形状,也就是将图片的通道数写出来。
更正的代码:
import tensorflow as tf
import os
main_path = "F:/文本文件数据/狗图片/"
# 导入数据的准备
file_name = os.listdir(main_path)
# print(file_name) # 以列表的形式列出文件的名字
# 完整路径
file_list = [main_path+x for x in file_name]
# print(file_list)
# 1.构建文件的队列
file_queue = tf.train.string_input_producer(file_list)
# 2.构造阅读器读取队列数据(默认读取一张图片)
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
print(value)
# 3.对每一个图片进行解码
image = tf.image.decode_jpeg(value)
print(image)
# 4.统一图片大小
image_resize = tf.image.resize_images(image,[200,200])
print(image_resize)
# 注意: 一定要把样本的形状固定【200,200,3】,在批处理的时候要求所有的数据形状必须定义
image_resize.set_shape([200,200,3])
# 5.批处理
image_batch = tf.train.batch([image_resize], batch_size=20, num_threads=1, capacity=20)
print(image_batch)
# 开启会话
with tf.Session() as sess:
# 定义一个线程协调器
coord = tf.train.Coordinator()
#开启读文件的线程(这里比之前开启线程方便很多,有专门的的API)
threads = tf.train.start_queue_runners(sess, coord=coord)
print(sess.run([image_batch]))
# 回收线程
coord.request_stop()
coord.join(threads)
结果:
更多推荐
所有评论(0)