对图像进行零填充而不加numpy

时间:2019-07-20 10:52:49

标签: python python-3.x zero-padding

我是Python的初学者,正在学习如何处理图像。

给定一个正方形图像(NxN),我想使其变成(N + 2)x(N + 2)图像,并在其周围有一个新的零层。我宁愿不使用numpy,而只坚持使用基本的python编程。关于如何做的任何想法?

现在,我使用.extend在右侧和底部添加零,但不能在其上下进行添加。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我假设通过图像我们正在讨论矩阵,在这种情况下,您可以这样做:

img = [[5, 5, 5], [5, 5, 5], [5, 5, 5]]
row_len = len(img)
col_len = len(img[0])

new_image = list()
for n in range(col_len+2):  # Adding two more rows
    if n == 0 or n == col_len + 1:
        new_image.append([0] * (row_len + 2))  # First and last row is just zeroes
    else:
        new_image.append([0] + img[n - 1] + [0])  # Append a zero to the front and back of each row

print(new_image)  # [[0, 0, 0, 0, 0], [0, 5, 5, 5, 0], [0, 5, 5, 5, 0], [0, 5, 5, 5, 0], [0, 0, 0, 0, 0]]

答案 1 :(得分:1)

我们可以创建一个填充功能,在图像周围添加零层(填充)。

def pad(img,layers):
    #img should be rectangular
    return [[0]*(len(img[0])+2*layers)]*layers    + \
           [[0]*layers+r+[0]*layers for r in img] + \
           [[0]*(len(img[0])+2*layers)]*layers

我们可以使用示例图像进行测试,例如:

i = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

所以

pad(i,2)

给予:

[[0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 2, 3, 0, 0],
 [0, 0, 4, 5, 6, 0, 0],
 [0, 0, 7, 8, 9, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]]