Преобразовал изображение в массив 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: добавлю статистику изображения для получения полной информации о создании маски.
Обновление 3: при необходимости вот изображение . Это изображение из RIWA, размер которого я изменяю с помощью этой функции.
from PIL import Image
import os

def resize_image(image_path, target_size=(1420, 1080)):
# Open an image using PIL
img = Image.open(image_path)

# Resize image to target size
img_resized = img.resize(target_size)

return img_resized

input_dir = '/river-water-segmentation-dataset/riwa_v2/validation/masks'
output_dir = '/river-water-segmentation-dataset/riwa_v2/validation/masks/crop'

# Loop through all image files in the directory
for filename in os.listdir(input_dir):
if filename.endswith('.jpg') or filename.endswith('.png'):
image_path = os.path.join(input_dir, filename)
resized_img = resize_image(image_path, target_size=(1420, 1080)) # Resize to 300x300 or any size you want

# Save the resized image to the output directory
resized_img.save(os.path.join(output_dir, f'resized_{filename}'))


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

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

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

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

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

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