我是Python的初学者,正在学习如何处理图像。
给定一个正方形图像(NxN),我想使其变成(N + 2)x(N + 2)图像,并在其周围有一个新的零层。我宁愿不使用numpy,而只坚持使用基本的python编程。关于如何做的任何想法?
现在,我使用.extend在右侧和底部添加零,但不能在其上下进行添加。
谢谢您的帮助!
答案 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]]