如何使用numpy.pad函数为RGB图像填充RGB值?

3

我试图使用np.pad给一个RGB图像填充品红色(255, 0, 255),但是使用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: 无法将操作数与重新映射后的形状[原始->重新映射]: (3,) 和请求形状 (3,2) 相匹配

1个回答

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)))的原因。

1
OP似乎想使用(255, 0, 255)作为填充的常量值。 - yatu
@yatu 是的,我想用品红色填充。 - trsvchn
1
是的!(((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)) 运行良好,@Ehsan请编辑答案,我会接受它! - trsvchn
很棒的 @trsvchn! :) - yatu
哦,我以为你想用255填充每个宽度和高度,深度用0填充。现在我明白你的问题了。我会相应地进行编辑。 - Ehsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接