tensorflow读取图片的方法

下面讲解tensorflow如何读取jpg格式的图片,png格式的图片是一样的。有两种情况:

第一种就是把图片看做是一个图片直接读进来,获取图片的原始数据,再进行解码,主要用到的函数就是tf.gfile.FastGFile,tf.image.decode_jpeg

图像解码与编码:一张RGB三通道的彩色图像可以看成一个三维矩阵,矩阵中的不位置上的数字代表图像的像素值。然后图像在存储时并不是直接记录这些矩阵中的数字,而是经过了压缩编码。所以将一张图像还原成一个三维矩阵的过程就是解码的过程,反之就是编码了。其实如果大家熟悉opencv的话,imread和imwrite就是一个解码和编码的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import matplotlib.pyplot as plt
import tensorflow as tf
image_raw_data = tf.gfile.FastGFile("C:/Users/admin/Desktop/fish-bike.jpg","r").read();
"""
image= tf.image.decode_jpeg(image_raw_data)
print(image.eval(session=tf.Session()))
"""
with tf.Session() as sess:
img_data=tf.image.decode_jpeg(image_raw_data,channels=3)
print(img_data.eval())
plt.imshow(img_data.eval())
plt.show()
#img_data = tf.image.convert_image_dtype(img_data,dtype = tf.float32)
encoded_image=tf.image.encode_jpeg(img_data)
with tf.gfile.GFile("C:/Users/admin/Desktop/fish-bike1.jpg","wb") as f:
f.write(encoded_image.eval())

image
decode_jpeg函数为jpeg(jpg)图片解码的过程,对应的encode_jpeg函数为编码过程,编码后将图片重命名写入到指定的路径下。
第二种方式就是把图片看看成一个文件,用队列的方式读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

import tensorflow as tf;

path = 'C:/Users/admin/Desktop/fish-bike.jpg'
file_queue = tf.train.string_input_producer([path]) #创建输入队列
image_reader = tf.WholeFileReader()
_, image = image_reader.read(file_queue)
image = tf.image.decode_jpeg(image)

with tf.Session() as sess:
coord = tf.train.Coordinator() #协同启动的线程
threads = tf.train.start_queue_runners(sess=sess, coord=coord) #启动线程运行队列
print sess.run(image)
coord.request_stop() #停止所有的线程
coord.join(threads)