#-*- coding:utf-8 -*-
import tensorflow as tf
from PIL import Image
cwd = 'f:/py/tfrecord/aa/' # 读取图片后存放的文件路径
filename = tf.train.string_input_producer(['f:/py/tfrecord/train.tfrecords'])
reader = tf.TFRecordReader() # 建立reader
_,serializer = reader.read(filename) # 读取文件
# 以下是需要读取的的内容,key与存放时的要一致,tf.FixedLenFeature([],tf.string)的tf.string也要与存放时的一致
feature = tf.parse_single_example(serializer,features={'label':tf.FixedLenFeature([],tf.string),
'img_raw':tf.FixedLenFeature([],tf.string),
'img_w': tf.FixedLenFeature([], tf.int64),
'img_h': tf.FixedLenFeature([], tf.int64),
'img_c': tf.FixedLenFeature([], tf.int64)})
'''
# img取出的格式是string,需要转换为tf.uint8,这五个参数都只是设定好,还没实际运行。
# 如果取出图片是统一的shape,就可以在
'''
img = tf.decode_raw(feature['img_raw'],tf.uint8)
img_w = feature['img_w'] #图像的宽,int
img_h = feature['img_h'] #图像的高,int
img_c = feature['img_c'] #图像的通道数,int
label = feature['label'] #图像的标签,bytes 输出为 b'japandog',所以下面需要decode
# img = tf.reshape(img,[256,256,3]) 如果想要固定图片的shape,就可以在这里添加这句,如果要原图的shape,只能在取出img_w,img_h,img_c之后,再使用tf.reshape(),否则会报错。
with tf.Session() as sess: #开始一个会话
coord=tf.train.Coordinator()
threads= tf.train.start_queue_runners(coord=coord)
for i in range(10):
example,w,h,c,label_out = sess.run([img,img_w,img_h,img_c,label])
label_out=label_out.decode('utf-8')
img_new = sess.run(tf.reshape(example, [w,h,c])) # tf.reshape需要sess.run()
img_show=Image.fromarray(img_new)
img_show.save(cwd+str(i)+label_out+'.jpg')
coord.request_stop()
coord.join(threads)