【问题标题】:Zero-Padding an image without numpy零填充没有 numpy 的图像
【发布时间】:2019-11-29 03:10:02
【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

  • 你不是说一整层零的 (N+2)X(N+2) 图像吗?
  • 对,错了!
  • 什么样的图像?使用诸如枕头之类的图像库加载/创建的东西?一个简单的颜色列表(什么颜色?灰度?rgb?rgba?)

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


【解决方案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]]

【讨论】:

  • (NxN) 应该变成 (N+2 x N+2),而不是像你的情况那样 (N+4 x N+4)
  • @lenik 我没有直接遵循 OP 对形状参数的请求;相反,我有一个“附加层”的论点。我觉得这更有用,因为需要在所有方面进行填充 - 即,如果我们有一个形状参数并且新形状隐含的填充量是奇数层,我们如何知道是添加到左上角还是右下角?
【解决方案2】:

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

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]]

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 2018-03-15
    • 2018-10-05
    • 2017-10-24
    • 2019-03-05
    • 2019-07-04
    • 2013-02-17
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多