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 ...
随机推荐
- 很有用的shell脚本
基础知识 expect基础知识 exp_continue是匹配一行后,从当前expect块第一行开始匹配 expect块的每一行匹配后,直接退出当前expect块,往下一个expect块开始匹配 ex ...
- “联邦对抗技术大赛”9月开战 微众银行呼唤开发者共同“AI创新”
“联邦对抗技术大赛”9月开战 微众银行呼唤开发者共同“AI创新” 从<第五元素>中的智能系统到<超体>中的信息操控,在科幻电影中人工智能已经发展到了极致.而在现实中,目前 ...
- Introduction to Restricted Boltzmann Machines
转载,原贴地址:Introduction to Restricted Boltzmann Machines,by Edwin Chen, 2011/07/18. Suppose you ask a b ...
- java线程基础巩固---wait和sleep的本质区别是什么,深入分析(面试常见问题)
对于wait和sleep貌似都会阻塞线程,但是它们确实是很大的区别的,所以下面一点点来探讨: 区别一.Sleep()是线程里面的方法,而Wait()是Object类的方法.这个比较简单,直接看代码便知 ...
- Android基础相关面试问题-binder面试问题详解
Linux内核的基础知识: 进程隔离/虚拟地址空间:在操作系统中为了保护某个进程互不干扰就设计了一个叫“进程隔离”的技术,防止进程A可以操作进程B的数据.而进程隔离技术用到了虚拟地址空间,进程A的虚拟 ...
- SSH服务端
- keep running
一个人的心态,会支撑你一路的发展:一个人的眼界,会决定选择的方向:一个人的格局,会意味着你成就多大的规模:一个人的毅力,会支持你能够走多远:一个人的用心,会注定你做出多好的成效!你变好了,一切就变好 ...
- 全国主要城市(电信)ip地址
全国主要城市(电信)ip地址 2011-09-08 16:17:18 标签:ip地址 全国主要城市(电信) 职场 休闲 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声 ...
- Ubuntu下python开发环境搭建
配置语言 1) 依次点击设置--Region & Language--Manage Installed Languages --install/remove language--chinese ...
- vue中点击按钮自动截图并下载图片
点击一个按钮,截取对应区域的界面,才对截取的界面进行裁切并下载 下载 html2canvas npm install html2canvas --save 引用 : import htm ...