0

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

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

现在,我使用 .extend 在右侧和底部添加零,但不能向上和向左添加。

谢谢您的帮助!

4

2 回答 2

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]]
于 2019-07-20T11:01:50.670 回答
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]]
于 2019-07-20T11:03:44.860 回答