如何将字符串张量转换为PIL图像?



我有一个字符串张量对象,我通过在图像张量上调用tf.io.encode_jpeg产生(encode_jpeg文档)。

如何将这个字符串张量转换为PIL图像?

我已经尝试调用Image.fromarray(encoded_tensor.numpy()),但这返回AttributeError: 'bytes' object has no attribute '__array_interface__'

您似乎有一个内存中(而不是磁盘上)jpeg编码的图像。您可以通过打印缓冲区的开头来检查是否正确:

print(encoded_tensor[:10])

并查看它是否以JPEG幻数ff d8 ff开头。

如果是,您需要将其包装在BytesIO中,然后使用:

将其打开到PIL Image中。
from io import BytesIO
from PIL import Image
im = Image.open(BytesIO(encoded_tensor))

这里的错误是由于您没有解码图像造成的。要解码图像,使用tf.io.decode_jpeg。请在下面找到工作代码。

import tensorflow as tf
from PIL import Image
img=tf.keras.utils.load_img('/content/dog.1.jpg')
img=tf.keras.utils.img_to_array(img)
#encode_jpeg encodes a tensor of type uint8 to string
encode_img=tf.io.encode_jpeg(img,'rgb')
#decode_jpeg decodes the string tensor to a tensor of type uint8
decode_img=tf.io.decode_jpeg(encode_img)
Image.fromarray(decode_img.numpy())

相关内容

  • 没有找到相关文章