1、知识点

"""
1、图片读取流程与API:
1、构造图片文件队列
文件队列API:
a)tf.train.string_input_producer(string_tensor,,shuffle=True) 将输出字符串(例如文件名)输入到管道队列
参数:
string_tensor 含有文件名的1阶张量
num_epochs:过几遍数据,默认无限过数据
return:具有输出字符串的队列 2、构造图片阅读器
图像读取API:tf.WholeFileReader 图像读取器,将文件的全部内容作为值输出的读取器
return:读取器实例
方法:read(file_queue):输出将是一个文件名(key)和该文件的内容(值) 3、读取图片数据(解码过程)
图像解码器
1、tf.image.decode_jpeg(contents) 将JPEG编码的图像解码为uint8张量
return:uint8张量,3-D形状[height, width, channels] 2、tf.image.decode_png(contents)将PNG编码的图像解码为uint8或uint16张量
return:张量类型,3-D形状[height, width, channels]
4、处理图片数据,固定图像形状
缩放图片:tf.image.resize_images(images, size)
参数:
images:4-D形状[batch, height, width, channels]或3-D形状的张量[height, width, channels]的图片数据
size:1-D int32张量:new_height, new_width,图像的新尺寸
返回4-D格式或者3-D格式图片
5、进行批处理
1、tf.train.batch(tensors,batch_size,num_threads = 1,capacity = 32,name=None) 读取指定大小(个数)的张量
参数:
tensors:可以是包含张量的列表
batch_size:从队列中读取的批处理大小
num_threads:进入队列的线程数
capacity:整数,队列中元素的最大数量
return:tensors 2、tf.train.shuffle_batch(tensors,batch_size,capacity,min_after_dequeue,num_threads=1,) 乱序读取指定大小(个数)的张量
参数:
min_after_dequeue:留下队列里的张量个数,能够保持随机打乱
6、线程协调器:
tf.train.Coordinator() 线程协调员,实现一个简单的机制来协调一组线程的终止
方法:
request_stop() 请求停止
should_stop() 检查是否要求停止
join(threads=None, stop_grace_period_secs=120) 等待线程终止
return:线程协调员实例
7、开启线程操作
tf.train.start_queue_runners(sess=None,coord=None) 收集所有图中的队列线程,并启动线程
参数与返回值:
sess:所在的会话中
coord:线程协调器
return:返回所有线程队列 2、图像知识
黑白图(又称单通道图):灰度值[0-255] , 一个像素点只有一个值
彩色图(又称三通道图):RGB ,一个像素点有三个值
图像数字化三要素:长度、宽度、通道数 [height,width,channels] ,[200,200,1]
特征:对于图片,一个像素表示一个特征
图像样本:每一个样本必须保证特征值数量一样
图片二阶张量:[100,200*200*1],表示100张40000个特征的黑白图
图片三阶张量:[200,200,1],表示一张200*200的黑白图
图片四阶张量:[100,200,200,1]表示100张200*200的黑色图片 图片的存储数据类型:uint8(节约空间)
矩阵计算:float32(提高精度) 3、报错:
1、Invalid argument: Shape mismatch in tuple component 0. Expected [200,200,3], got [200,200,4]
解决方法:表示数据不匹配,定义为3通道,但是图片本身是4通道,因此需将定义的3通道改为4通道
"""

2、代码

# coding = utf-8
import tensorflow as tf
import os def readPic(filelist):
"""
读取图片
:param filelist: 文件路径+名字列表名
:return:每张图片的张量
"""
#1、构造文件队列
file_queue = tf.train.string_input_producer(file_list)
#2、构造阅读器去读取图片内容(默认读取一张图片)
reader = tf.WholeFileReader()
key , value = reader.read(file_queue)
#3、对读取的图片进行解码
image = tf.image.decode_jpeg(value)
#4、处理图像大小
image_size = tf.image.resize_images(image,[200,200])
#print(image_size) #注意:一定要把样本的形状固定 [200,200,3],在批处理的时候要求所有图像形状固定且一致
image_size.set_shape([200,200,3])
#print(image_size) #5、进行批处理
image_batch = tf.train.batch([image_size], batch_size=20, num_threads=1, capacity=20)
print(image_batch)
return image_batch if __name__ == '__main__':
file_name = os.listdir("./pic")
file_list = [os.path.join("./pic",file) for file in file_name]
image_batch = readPic(file_list)
#print(image_batch)
#开启会话
with tf.Session() as sess:
#定义一个协调器
coord = tf.train.Coordinator()
#开启线程
threads = tf.train.start_queue_runners(sess,coord=coord) print(sess.run([image_batch])) #回收线程
coord.request_stop()
coord.join(threads)

最新文章

  1. AsyncOperation变成同步的代码
  2. C# Driver LINQ Tutorial
  3. PADS Layout 使用
  4. mate代码详解
  5. delphi 中怎么知道某一个月有多少天
  6. lintcode:Plus One 加一
  7. 非堵塞socket实现android手机与PC的文件传输
  8. BZOJ 3122 随机数生成器
  9. Ubuntu14下LAMP环境的安装以及yaf扩展的安装
  10. oracle累计求和
  11. sort()没有返回值
  12. web Function函数
  13. 获得其他程序弹出菜单的内容(一个困扰许久的问题o(╯□╰)o)
  14. 原子变量与CAS算法(二)
  15. WebForm复合控件RadioButtonList、CheckBoxList、DropDownList
  16. 浅谈MVC、MVP、MVVM
  17. Catogory如何添加属性
  18. MVC 自定义特性(验证用户登录session是否已经过期)
  19. https建立通讯过程及运行机制 [转]
  20. SQL Server 索引重建脚本

热门文章

  1. nginx的反向代理的优势,特点于原理(一)
  2. Hadoop_09_HDFS 的 NameNode工作机制
  3. 1.Nginx安装
  4. 修改虚拟机CentOS系统ip地址和主机名
  5. Linux 命令配置IP
  6. zencart用sql将某个产品属性值设为只读和默认
  7. Tomcat启动中文乱码,淇℃伅等
  8. AMD 异步模块定义
  9. PHP内置常量,和可变变量,常量的定义
  10. CentOS 安装oracle client