«Image.fromarray» вызывает ошибку «OverflowError: размер не помещается в int» в крупномасштабных изображениях - PullRequest
0 голосов
/ 28 апреля 2019

Я использую этот код для обработки изображений всего слайда (формат .svs).Этот код работает хорошо, когда NUM_TOP_TILES = 50 до NUM_TOP_TILES = 12000.Поскольку изображения целого слайда имеют очень большой размер, в этом случае, если я увеличиваю NUM_TOP_TILES>12000, я получаю ошибку

OverflowError: размер не помещается в ошибку int.

Это очень распространенная проблема с Pillow, когда использовались большие изображения.В github и StackOverFlow доступно много решений, но я не могу решить свою проблему.Согласно моему анализу, Image.fromarray() из Pillow в приведенной ниже функции вызывает эту проблему.Будет очень полезно, если кто-нибудь предложит какое-либо решение для решения этой проблемы.Для справки я привел соответствующие function и error traceback.

Функция:

def np_to_pil(np_img):
  """
  Convert a NumPy array to a PIL Image.
  Args:
    np_img: The image represented as a NumPy array.
  Returns:
     The NumPy array converted to a PIL Image.
  """
  if np_img.dtype == "bool":
    np_img = np_img.astype("uint8") * 255
  elif np_img.dtype == "float64":
    np_img = (np_img * 255).astype("uint8")
return Image.fromarray(np_img)

Отслеживание ошибок

Traceback (последний последний вызов):

File "WsiToImagePatch.py", line 35, in np_to_pil
    return Image.fromarray(np_img)
  File "/usr/local/lib/python3.5/dist-packages/PIL/Image.py", line 2536, in fromarray
    return frombuffer(mode, size, obj, "raw", rawmode, 0, 1)
  File "/usr/local/lib/python3.5/dist-packages/PIL/Image.py", line 2479, in frombuffer
    return frombytes(mode, size, data, decoder_name, args)
  File "/usr/local/lib/python3.5/dist-packages/PIL/Image.py", line 2412, in frombytes
    im.frombytes(data, decoder_name, args)
  File "/usr/local/lib/python3.5/dist-packages/PIL/Image.py", line 812, in frombytes
    s = d.decode(data)
OverflowError: size does not fit in an int
...