【问题标题】:How to pad a RGB image with RGB values using numpy.pad如何使用 numpy.pad 用 RGB 值填充 RGB 图像
【发布时间】:2020-08-23 19:30:59
【问题描述】:

我正在尝试用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)

【问题讨论】:

    标签: python numpy padding pad


    【解决方案1】:

    我认为您正在寻找的是:

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

    根据numpy docconstant_values的形式是:

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

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

    【讨论】:

    • OP 似乎想使用(255, 0, 255) 作为填充的常量值
    • @yatu 是的,我想用洋红色填充
    • 是的! (((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)) 工作正常,@Ehsan 请编辑答案,我会接受!
    • 好@trsvchn ! :)
    • 哦,我想你想用 255 填充每个宽度和高度,用 0 填充深度。现在我明白你的问题了。相应地进行编辑。
    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2012-09-29
    • 2018-06-10
    • 2012-06-30
    • 2011-02-05
    • 2012-04-22
    相关资源
    最近更新 更多