tensorflow读取图片案例
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)
tensorflow读取图片案例的更多相关文章
- (第二章第二部分)TensorFlow框架之读取图片数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...
- TensorFlow与OpenCV,读取图片,进行简单操作并显示
TensorFlow与OpenCV,读取图片,进行简单操作并显示 1 OpenCV读入图片,使用tf.Variable初始化为tensor,加载到tensorflow对图片进行转置操作,然后openc ...
- TensorFlow笔记-图片读取
回到上一篇文件的读取分这么几步: # 构造队列 # 1,构造图片文件的队列 file_queue = tf.train.string_input_producer(filelist) # 构造阅读器 ...
- 第十二节,TensorFlow读取数据的几种方法以及队列的使用
TensorFlow程序读取数据一共有3种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow图的起 ...
- 云端TensorFlow读取数据IO的高效方式
低效的IO方式 最近通过观察PAI平台上TensoFlow用户的运行情况,发现大家在数据IO这方面还是有比较大的困惑,主要是因为很多同学没有很好的理解本地执行TensorFlow代码和分布式云端执行T ...
- MySQL数据库写入图片并读取图片显示到JLabel上的详解
相较于Oracle,MySQL作为一个轻量级的开源的数据库,可谓是大大简化了我们的操作.这次我就来写一个关于数据库存入图片,获取图片的例子吧,也为了今后的复习使用.(我们一般采取存入路径的方式,而不是 ...
- Tensorflow显示图片
Tensorflow在处理数据时,经常加载图像数据,有的时候是直接读取文件,有的则是读取二进制文件,为了更好的理解Tensorflow数据处理模式,先简单讲解显示图片机制,就能更好掌握是否读取正确了. ...
- 利用Tensorflow读取二进制CIFAR-10数据集
使用Tensorflow读取CIFAR-10二进制数据集 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow官方文档 tf.transpose函数解析 tf.sli ...
- [置顶]
云端TensorFlow读取数据IO的高效方式
低效的IO方式 最近通过观察PAI平台上TensoFlow用户的运行情况,发现大家在数据IO这方面还是有比较大的困惑,主要是因为很多同学没有很好的理解本地执行TensorFlow代码和分布式云端执行T ...
随机推荐
- 使用函数rand5()来实现函数rand7()
题目: 给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样.现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数. 思路: 很多人的第一 ...
- Ubuntu .tar.xz文件解压缩命令
1.解压缩.tar.xz文件 这是两层压缩,外面是xz压缩方式,里层是tar压缩 所以可以分两步实现解压 $ xz -d filename.tar.xz $ tar -xvf filename.tar ...
- springboot集成Spring Session
10.1 分布式集群环境下的集成(同域名.同项目) 10.1.1 创建SpringBoot的web支持项目07-springboot-session 创建项目 10.1.2 ...
- 清除LabVIEW中波形图表或波形图中的历史数据
清除LabVIEW中波形图表或波形图中的历史数据 方法一: 前面板中右键单击波形图表或波形图,选择数据操作>>清除图表或数据操作>>清除图形 方法二:(编程方法) 用于清除图表 ...
- kylin实战(一)
kylin适用场景 OLAP 它适合数据量大,查询维度多,但是业务改动不频繁的场景.因为业务多,则kylin的cube很多.每次业务变更,kylin修改的工作量大,且每次全量跑数据耗费时间比较长. 它 ...
- BBS-登录注册
目录 1注册上传头像 2.登录图片验证码校验 1注册上传头像 创建admin管理员代码:python3 manage.py createsuperuser 1.在setting文件中配置,用户注册成功 ...
- php类知识---trait特性
#由于php类只支持单一继承,但我们又需要使用一些类的优秀特性,因此有了trait <?php trait cpc #trait 下的方法只能用public { function trainni ...
- Ubuntu 16.04安装docker详细步骤
1. 卸载之前的旧版本 sudo apt-get remove docker docker-engine docker-ce docker.io 2. 更新apt包 sudo apt-get upda ...
- 【计算机-虚拟wifi】Win7虚拟wifi设置
虚拟Wifi,可以让电脑变成无线路由器,实现共享上网. 设置步骤 1.以管理员身份运行:cmd.exe 2.启动并设置虚拟网卡: 命令窗口中输入: netsh wlan set host ...
- XML -- XML基础知识
1.XML的结构 XML的结构采用的是树结构,树结构就是一种一对多的关系结构. XML必定有一个根节点.因为,在解析这个XML时,需要有个起始位置进行遍历解析,这个跟节点就是起始位置. 2.XML的元 ...