TypeError: Invalid dimensions for image data

首先看一段代码:

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np

image_raw_data = tf.gfile.FastGFile('images/4.jpg', 'rb').read()

with tf.Session() as sess:
     img_data = tf.image.decode_jpeg(image_raw_data, channels=1)
     plt.imshow(img_data.eval())
     plt.show()

运行后:

Traceback (most recent call last):
  File "F:/Pycharm_Projection/Test/Test.py", line 9, in <module>
    plt.imshow(img_data.eval())
  File "D:\Users\EHome_LJG\Anaconda3\envs\tensorflow\lib\site-packages\matplotlib\pyplot.py", line 3205, in imshow
    **kwargs)
  File "D:\Users\EHome_LJG\Anaconda3\envs\tensorflow\lib\site-packages\matplotlib\__init__.py", line 1855, in inner
    return func(ax, *args, **kwargs)
  File "D:\Users\EHome_LJG\Anaconda3\envs\tensorflow\lib\site-packages\matplotlib\axes\_axes.py", line 5487, in imshow
    im.set_data(X)
  File "D:\Users\EHome_LJG\Anaconda3\envs\tensorflow\lib\site-packages\matplotlib\image.py", line 653, in set_data
    raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data

错误的意思是图像尺寸的问题,于是查看图像属性,图像的深度是8,说明是单通道,但为什么还是会报错呢

于是尝试用图片编辑器打开图片,然后再保存,发现错误没有了,图像可以正常打开了,但是如果图片非常多的话,不可能

一一打开重新保存的,说明下图片是网上下载的数据集,于是我猜测可能图片本身就是多通道的,但是由于收集图片的人使用

编辑器的问题,导致图像不是真实的通道,于是尝试将decode_jpeg里的channel=1改为channel=3,然后所有问题就解决了

猜你喜欢

转载自blog.csdn.net/oMoDao1/article/details/81805746