在 python 中创建填充图像

Create a padded image in python

我有一个灰度图像(称为输入),我正在尝试在图像周围添加 1px 填充(仅由 0 组成)以应用滤镜:

padded = np.zeros((input.shape[0]+2, input.shape[1]+2), dtype=int)
padded[1:-1, 1:-1] = input[:,:]

但结果的对比度不如原来的。为什么? 这是原图:

这是带边框的图片:

如果我不使用 zeros 函数而是使用 once 函数并将矩阵乘以 255,我会得到一个甚至不同的图像。我不明白为什么我只是将一张图片复制到另一张图片。

来自plt.imshow docs:

X : array-like or PIL image

The image data. Supported array shapes are:

  • (M, N): an image with scalar data. The values are mapped to colors using normalization and a colormap. . . .

标准化意味着颜色被“分散”,最小值是黑色,最大值是白色。所以那些 np.zeros 正在制作最小值 0 (和黑色边框)并使其他一切更轻以补偿。这应该可以修复它(我认为)

padded = np.pad(input, 
                pad_width = 1, 
                mode = 'minimum') # or mode = "maximum' for a white border

如果你绝对需要0的边框,你可以这样做:

padded = np.pad(input - input.min(), 
                pad_width = 1, 
                mode = 'constant') 

这改变了你的原始图片的范围开始0,所以归一化应该是一样的。