调用tf.image.resize后Matplotlib的plt.imshow输出空白画布问题求助
TensorFlow图像resize后matplotlib显示空白解决方案
核心原因
tf.image.resize 执行时会自动将输入的uint8类型图像张量(取值范围0255)转换为float32类型,但不会修改数值区间,转换后的张量取值仍保持0255。
matplotlib的plt.imshow接口对不同输入类型的取值范围要求不同:
- 输入为uint8类型时,默认按0~255的区间解析颜色
- 输入为float类型时,默认按0~1的区间解析颜色,超过1的数值会被截断为1,对应纯白色,因此整张图显示为空白画布。
可行解决方案
你可以任选以下任意一种方法修复问题:
方法1:将resize后的图像归一化到0~1区间
img = parse_image(img_paths[0]) img = tf.image.resize(img, [224, 224]) # 新增归一化步骤 img = img / 255.0 plt.imshow(img)
方法2:将resize后的图像转回uint8类型
img = parse_image(img_paths[0]) img = tf.image.resize(img, [224, 224]) # 新增类型转换步骤 img = tf.cast(img, tf.uint8) plt.imshow(img)
方法3:强制指定matplotlib的颜色解析区间
不需要修改张量,直接在调用plt.imshow时增加vmin和vmax参数即可:
img = parse_image(img_paths[0]) img = tf.image.resize(img, [224, 224]) plt.imshow(img.numpy(), vmin=0, vmax=255)
内容的提问来源于stack exchange,提问作者Olli
相关产品推荐
相关产品推荐

