我有一个字符串张量对象,我通过在图像张量上调用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())