Преобразовал изображение в массив numpy, изменил его размер, чтобы его можно было разделить на 3, и при этом он по-прежнPython

Программы на Python
Ответить
Anonymous
 Преобразовал изображение в массив numpy, изменил его размер, чтобы его можно было разделить на 3, и при этом он по-прежн

Сообщение Anonymous »

Я попробовал этот код из руководства по маскировке изображения:

Код: Выделить всё

def show_mask(mask, ax):
color = np.array([30/255, 144/255, 255/255, 0.6])
h, w = np.array(mask).shape[-2:]
mask_image = np.array(mask).reshape(h, w, -1) * color.reshape(1, 1, -1)
ax.imshow(mask_image)

fig, axes = plt.subplots()
axes.imshow(pic)
show_mask(pix, axes)
и выдает эту ошибку

Код: Выделить всё

in :16                                                                                   │
│                                                                                                  │
│   13                                                                                             │
│   14 axes.imshow(pic)                                                                            │
│   15 ground_truth_seg = pic                                                                      │
│ ❱ 16 show_mask(pix, axes)                                                                        │
│   17 # axes.title.set_text(f"Ground truth mask")                                                 │
│   18 # axes.axis("off")                                                                          │
│   19                                                                                             │
│                                                                                                  │
│ in show_mask:9                                                                                   │
│                                                                                                  │
│    6 │   h, w = np.array(mask).shape[-2:]                                                        │
│    7 │   print(h)                                                                                │
│    8 │   print(w)                                                                                │
│ ❱  9 │   mask_image = np.array(mask).reshape(h, w, -1) * color.reshape(1, 1, -1)                 │
│   10 │   ax.imshow(mask_image)                                                                   │
│   11                                                                                             │
│   12 fig, axes = plt.subplots()                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
ValueError: operands could not be broadcast together with shapes (1420,3,1080) (1,1,4)
Изображение и предполагаемая маска являются трехмерными, поэтому умножение матрицы (изображение маски) должно быть допустимым.
На самом деле в наборе данных есть заданная маска, это то же самое, что я собираюсь сделать?
Ошибка до этого заключалась в том, что изображение не является пустым массивом, я уже изменил размер изображения и конвертировал его в numpy, но проблема остается. Что-то я пропустил?
Детали изображения:
Изображение представляет собой JPEG в классе PIL.Image.Image с размером 1420, 1080.
Изображение хранится в

Код: Выделить всё

pic = picture_dict[0]["img"]
pix = np.array(pic)
Обновление 1: добавление полного сообщения об ошибке.
Обновление 2: добавление статистики изображения для получения полной информации о создании маски.

Подробнее здесь: https://stackoverflow.com/questions/792 ... 3-and-stil
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»