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 ...
随机推荐
- Oracle笔记(四) 简单查询、限定查询、数据的排序
一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会) ...
- 【计算机网络】网络地址转换NAT
网络地址转换NAT 要知道到每个IP使能的设备都需要一个IP地址.以一个家庭为例,假设当地的ISP已为该家庭分配过一块地址,但是后期家庭中的智能设备增加(智能手机.电脑等),这些都需要IP地址才可上网 ...
- 认识并初步应用GitHub——C++
好好学习,天天向上 一.这是一个根据规定的开头 GIT的地址 https://github.com/Notexcellent GIT的用户名 Notexcxllent 学号后五位 82405 博客地址 ...
- ora-01847:月份中日的值必须介于 1 和当月最后一日之间
今天解决了一个奇葩问题: ORA-01847: 月份中日的值必须介于 1 和当月最后一日之间 将数据从一个视图倒入到一个同结构的表中,但是老报错,也就那么几个字段,肉眼真看不出来什么问题,但是既然报这 ...
- golang gin框架 集成swagger 自动生成文档
goswagger github仓库 https://github.com/swaggo/swag 安装 swag cli 1.因为网络原因,先安装gopm 管理工具 go get -v -u git ...
- 15-资源等待类型sys.dm_os_wait_stats
一.总结 1.网址 https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/ ...
- ESP8266—“ICACHE_FLASH_ATTR”宏——解释含义
const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...
- Ubuntu16.04连接SSH出现 Server responded “Algorithm negotiation failed” 的解决方法
今天安装了Ubuntu16.04虚拟机,与SSH连接时出现了如下问题 解决方法如下: (写在前面:请先确保自己已经给Ubuntu安装了SSH服务.安装方法是在root模式下,终端输入命令apt-g ...
- RAID的多种实现
RAID的诞生 由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988年,发表的文章:"A Case for Redundant Arra ...
- jpa多对一映射
1.插入 建一个部门类Dept和一个员工类Emp: Emp对Dept是多对一的关系:因为一个部门有多个员工,而一个员工只有一个部门: Emp类中添加一个Dept的属性: @ManyToOne注解表 ...