Преобразование двух PNG-изображений в массивы numpy приводит к двум разным формам

#python #arrays #numpy #image-processing #python-imaging-library

#python #массивы #numpy #обработка изображений #python-imaging-library

Вопрос:

При преобразовании PNG-файлов в массивы numpy я заметил, что преобразование иногда приводило к разным формам массива. В то время как первое изображение имеет трехмерную форму массива (как и большинство изображений), второе имеет два измерения. Оба изображения являются скриншотами и не были изменены. К сожалению, форма массива действительно имеет значение для моего предполагаемого использования.

Я использовал приведенный ниже код для преобразования изображения.

 import numpy as np
import PIL.Image

img_path = ''  # Put the image path here

img_pil = PIL.Image.open(img_path)
img_array = np.asarray(img_pil)

print(img_array.shape)
  

Мой вопрос заключается в том, есть ли способ выровнять формы изображений.

Ответ №1:

Если ни одно из ваших изображений не является цветным, вы также можете сэкономить память и работать в оттенках серого, чтобы вы могли убедиться, что с:

 im = Image.open(FILENAME).convert('L')
  

Или вы всегда можете перейти к цвету с помощью:

 im = Image.open(FILENAME).convert('RGB')
  

Ответ №2:

Из того, что я смог увидеть здесь: обработка изображений с помощью numpy, изображения в оттенках серого (как, похоже, в случае со вторым изображением) иногда сохраняются только в двух измерениях, поскольку нет необходимости сохранять три разных цвета для каждого пикселя. Вероятно, это зависит от того, как было создано изображение.

Комментарии:

1. Это кажется логичным. Есть ли прямой способ создания изображений с соответствующими формами?

2. По моему опыту, большинство, если не все изображения, которые вы создаете и сохраняете самостоятельно, будут в формате rgb (3 измерения). Вы можете создать функцию, которая «переводит» их из двухмерных массивов в трехмерные.