python - TypeError: 使用 tf.io.decode_jpeg 导入后,无法使用 plt.imshow 将图像数据转换为浮点数
问题描述
我正在尝试使用 Tensorflow 加载文件并可视化结果,但我收到 TypeError:图像数据无法转换为浮点数
import tensorflow as tf
import matplotlib.pyplot as plt
image = tf.io.read_file('./my-image.jpg')
image = tf.io.decode_jpeg(image, channels=3)
print(image.shape) # (?, ?, 3)
plt.imshow(image)
解决方案
不确定您的 tensorflow 版本。TensorFlow 默认使用静态计算图在1.x
. image
你得到的数据类型是Tensor
这样显示这个错误的。首先创建一个自定义图片。
import numpy as np
from PIL import Image
np.random.seed(0)
image = np.random.random_sample(size=(256,256,3))
im = Image.fromarray(image, 'RGB')
im.save('my-image.jpg')
然后你需要使用tf.Session()
来启动这个会话。这将显示上面创建的图像。
import tensorflow as tf
import matplotlib.pyplot as plt
image = tf.io.read_file('my-image.jpg')
image = tf.io.decode_jpeg(image, channels=3)
print(image)
with tf.Session() as sess:
plt.imshow(sess.run(image))
plt.show()
# print
Tensor("DecodeJpeg:0", shape=(?, ?, 3), dtype=uint8)
tf.enable_eager_execution()
或者您可以通过在 tensorflow中启动动态计算图。上面的代码也达到了同样的效果。
import tensorflow as tf
import matplotlib.pyplot as plt
tf.enable_eager_execution()
image = tf.io.read_file('my-image.jpg')
image = tf.io.decode_jpeg(image, channels=3)
plt.imshow(image)
plt.show()
tensorflow2 中的默认值是动态计算图。你不需要使用tf.enable_eager_execution()
.
推荐阅读
- java - 如何使用 Intent 设置警报 选择警报的完整日期(包括日、月)
- class - 多次调用其他方法类中的方法
- python - 在 BeautifulSoup4 中获取标签之间的句子长度
- bash - 在 bash 中使 docker rm 命令静音
- airflow - 将气流 1.9 升级到气流 1.10.2:task_log_reader 错误
- java - 每天成功登录后如何为用户添加积分
- json - 为什么使用 Ajax 时输入值为 NULL?(ASP.NET CORE)
- java - 生成以 x 开头的随机数列表
- javascript - 无法使用 mongoose.find 查询日期
- ios - 无法将“testViewController.Type”类型的值转换为预期的参数类型“UIViewController”