PIL.Image.verify () ломает способность конвертировать изображение PIL в Numpy - PullRequest
0 голосов
/ 02 октября 2019

Этот код работает должным образом:

import numpy as np
import PIL.Image


img = PIL.Image.open('test.png')
img_np = np.array(img)
print(img_np.dtype, img_np.shape)

> uint8 (192, 256)

Когда я добавляю verify(), img_np становится объектом, а не данными изображения:

import numpy as np
import PIL.Image


img = PIL.Image.open('test.png')
img.verify()
img_np = np.array(img)
print(img_np.dtype, img_np.shape)

> object ()

Есть ли способпреобразовать изображение PIL в NumPy после verify()? Или нам действительно нужно снова открыть изображение? Следующее работает, но взломано.

import numpy as np
import PIL.Image


img = PIL.Image.open('test.png')
img.verify()
img = PIL.Image.open('test.png')
img_np = np.array(img)
print(img_np.dtype, img_np.shape)

> uint8 (192, 256)

1 Ответ

1 голос
/ 02 октября 2019

Это задокументированное поведение :

Image.verify()

Проверяет содержимое файла. Для данных, считанных из файла, этот метод пытается определить, не поврежден ли файл, без фактического декодирования данных изображения. Если этот метод обнаруживает какие-либо проблемы, он вызывает подходящие исключения. Если вам необходимо загрузить изображение после использования этого метода, вы должны снова открыть файл изображения.

...