Существующее изображение в формате png не открывается opencv - PullRequest
0 голосов
/ 19 марта 2019

В настоящее время я столкнулся с очень странной проблемой, которую я не смог найти объяснения.У меня есть текстовый файл со списком имен файлов.Идея состоит в том, чтобы прочитать этот текстовый файл и прочитать соответствующие изображения одно за другим благодаря imread.Но происходит нечто очень странное: когда я пытаюсь открыть изображение, вручную вводя первый путь списка, оно работает, но когда я делаю это, читая файл списка, это не работает.С тестом, который я запустил, будет понятнее:

entepath='INRIAPerson'
line = 'Train/pos/crop_000010.png'

plt.figure()
img = cv2.imread(os.path.join(path, line), cv2.IMREAD_UNCHANGED)
plt.imshow(img)
with open(os.path.join(path, 'Train', 'pos.lst'), 'r') as f:
    for line in f:
        print(line)
        plt.figure()
        img = cv2.imread(os.path.join(path, line), cv2.IMREAD_UNCHANGED)
        plt.imshow(img)
        break

Вывод будет таким:

    Train/pos/crop_000010.png

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-24-6de28785d7e8> in <module>
          9         plt.figure()
         10         img = cv2.imread(os.path.join(path, line), cv2.IMREAD_UNCHANGED)
    ---> 11         plt.imshow(img)
         12         break

    ~/anaconda3/envs/pytorch/lib/python3.7/site-packages/matplotlib/pyplot.py in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, data, **kwargs)
       2699         filternorm=filternorm, filterrad=filterrad, imlim=imlim,
       2700         resample=resample, url=url, **({"data": data} if data is not
    -> 2701         None else {}), **kwargs)
       2702     sci(__ret)
       2703     return __ret

    ~/anaconda3/envs/pytorch/lib/python3.7/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
       1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
       1809                         RuntimeWarning, stacklevel=2)
    -> 1810             return func(ax, *args, **kwargs)
       1811 
       1812         inner.__doc__ = _add_data_doc(inner.__doc__,

    ~/anaconda3/envs/pytorch/lib/python3.7/site-packages/matplotlib/axes/_axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs)
       5492                               resample=resample, **kwargs)
       5493 
    -> 5494         im.set_data(X)
       5495         im.set_alpha(alpha)
       5496         if im.get_clip_path() is None:

    ~/anaconda3/envs/pytorch/lib/python3.7/site-packages/matplotlib/image.py in set_data(self, A)
        640         if (self._A.dtype != np.uint8 and
        641                 not np.can_cast(self._A.dtype, float, "same_kind")):
    --> 642             raise TypeError("Image data cannot be converted to float")
        643 
        644         if not (self._A.ndim == 2

    TypeError: Image data cannot be converted to float

Важно отметить, что первое изображение выводится на график (и, следовательно, было загружено) в то время как второй нет.Я понятия не имею, почему это не работает во втором случае, это может быть проблема с несколькими открытиями файлов?

Заранее спасибо!

...