Как заполнить изображение RGB значениями RGB с помощью numpy .pad - PullRequest
3 голосов
/ 08 мая 2020

Я пытаюсь заполнить изображение RGB пурпурным (255, 0, 255) цветом с помощью np.pad. Но я получаю сообщение об ошибке при использовании значений RGB как constant_values. Например:

import numpy as np
from scipy.misc import face
import matplotlib.pyplot as plt


def pad_img(img, pad_with):
    pad_value = max(img.shape[:-1])
    img_padded = np.pad(img,
                        ((0, (pad_value - img.shape[0])),  # pad bottom
                         (0, (pad_value - img.shape[1])),  # pad right
                         (0, 0)),  # don't pad channels
                        mode='constant',
                        constant_values=pad_with)

    fig, (ax1, ax2) = plt.subplots(1, 2)
    ax1.imshow(img)
    ax2.imshow(img_padded)
    plt.show()

Это отлично работает (заполнение белым цветом):

img = face()
pad_img(img, pad_with=255)

out1

А это не ( заполнение пурпурным):

img = face()
pad_img(img, pad_with=(255, 0, 255))

Бросок:

ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (3,) and requested shape (3,2)

1 Ответ

1 голос
/ 08 мая 2020

Я думаю, что вы ищете:

img = face()
pad_img(img, pad_with=(((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)))

Согласно numpy do c constant_values имеет форму:

((before_1, after_1), ... (before_N, after_N))

И я думаю, поэтому ошибка говорит, что она принимает форму (3,) ((255, 0, 255)) для pad_width, когда запрашивает форму (3,2) ((((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)))

...