在python中创建填充图像

问题描述

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

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

,但结果与原始图像相比对比度较低。为什么? 这是原始图片

link

这是带边框的图像:

link

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

解决方法

plt.imshow docs:

X :类似阵列的图像或PIL图像

图像数据。支持的数组形状为:

  • (M,N):具有标量数据的图像。使用 归一化 和颜色图将值映射到颜色。 。 。 。

归一化意味着颜色被“分散”,因此最小值是黑色,最大值是白色。因此,这些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(),mode = 'constant') 

这会更改原始图片的范围以开始0,因此规范化应该相同。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...