我们如何使用tf.image.encode_jpeg在TensorFlow中写出图像?

时间:2016-10-29 14:48:47

标签: tensorflow

鉴于Tensor,我想使用此函数获取一个0D字符串,然后将其写为" sample.jpg"。

这可以通过OpenCV或Python PIL轻松实现,但我希望尽可能将所有内容保留在TF内。

2 个答案:

答案 0 :(得分:4)

在tensorflow中,函数看起来像:

 import tensorflow as tf


def write_jpeg(data, filepath):
    g = tf.Graph()
    with g.as_default():
        data_t = tf.placeholder(tf.uint8)
        op = tf.image.encode_jpeg(data_t, format='rgb', quality=100)
        init = tf.initialize_all_variables()

    with tf.Session(graph=g) as sess:
        sess.run(init)
        data_np = sess.run(op, feed_dict={ data_t: data })

    with open(filepath, 'w') as fd:
        fd.write(data_np)


import numpy as np

R = np.zeros([128 * 128])
G = np.ones([128 * 128]) * 100
B = np.ones([128 * 128]) * 200

data = np.array(list(zip(R, G, B)), dtype=np.uint8).reshape(128, 128, 3)

assert data.shape == (128, 128, 3)

write_jpeg(data, "./test.jpeg")

numpy部分可以改进,但它仅用于演示目的

答案 1 :(得分:0)

或者,您可以评估图像并使用opencv或PIL进行保存。

import cv2 # opencv
from scipy.misc import imsave

... network generates an image ...
out = network(input)
img = tf.image.encode_jpeg(out)

img_to_save = img.eval(feed_dict)
# cv2.imwrite("myimage", img_to_save)
imsave("myimage.jpeg", img_to_save) 

您的图片可能需要也可能不需要评估feed_dict。