我是 Python 的初学者,我正在学习如何处理图像。
给定一个正方形图像(NxN),我想把它变成一个(N+2)x(N+2)图像,周围有一个新的零层。我宁愿不使用 numpy,只坚持基本的 python 编程。关于如何做到这一点的任何想法?
现在,我使用 .extend 在右侧和底部添加零,但不能向上和向左添加。
谢谢您的帮助!
我是 Python 的初学者,我正在学习如何处理图像。
给定一个正方形图像(NxN),我想把它变成一个(N+2)x(N+2)图像,周围有一个新的零层。我宁愿不使用 numpy,只坚持基本的 python 编程。关于如何做到这一点的任何想法?
现在,我使用 .extend 在右侧和底部添加零,但不能向上和向左添加。
谢谢您的帮助!
我假设通过图像我们正在谈论一个矩阵,在这种情况下你可以这样做:
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]]
我们可以创建一个填充函数,在图像周围添加零层(填充它)。
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]]