如何使用 numpy.pad 用 RGB 值填充 RGB 图像

How to pad a RGB image with RGB values using numpy.pad

我正在尝试用 np.pad 填充品红色 (255, 0, 255) 颜色的 RGB 图像。但是在使用 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)

这不是(用洋红色填充):

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)

我想你要找的是:

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

根据 numpy doc constant_values 的形式为:

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

而且我认为这就是为什么错误说它的形状是 (3,) ((255, 0, 255)) for pad_width 而它请求的形状是 (3,2) ((((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)) )