【发布时间】:2017-07-07 02:08:36
【问题描述】:
我有一个图像定义为:
imagen = scipy.misc.imread("C:\\Users\\Reymi\\Downloads\\imagen.png")
它的大小为 (1929,1280) 我需要在数组的每一侧添加 2 列和 0 行,这样我就可以使用内核而不必担心它会超出数组。
怎么样?谢谢
【问题讨论】:
我有一个图像定义为:
imagen = scipy.misc.imread("C:\\Users\\Reymi\\Downloads\\imagen.png")
它的大小为 (1929,1280) 我需要在数组的每一侧添加 2 列和 0 行,这样我就可以使用内核而不必担心它会超出数组。
怎么样?谢谢
【问题讨论】:
使用pad函数:
im_new = scipy.pad(array=imagen, pad_width=[2, 2], mode='constant', constant_values=0)
上面的函数使数组在所有方向上都变大了 2。如果您想 替换 用 0 的外部两个像素而不使图片变大我不 认为 有一个内置函数,但我会做类似的事情:
pad = 2
im_new = scipy.zeros_like(imagen)
im_new[pad:-pad, pad:-pad] = imagen[pad:-pad, pad:-pad]
这会创建一个 0 的图像,然后用 imagen 的中间部分填充中间。
【讨论】:
np.pad(imagen, ((0, 0, (2, 2), 'constant')
选项 - 1 - 使用 OpenCV
imagenBorder = cv2.copyMakeBorder(imagen,2,2,2,2,cv2.BORDER_REFLECT)
选项 - 2 - 手动填充到 numpy 数组
import numpy as np
borderWidth = 2
i = 0
while i < borderWidth:
imagen = np.insert(imagen, 0, 0, axis=1)
imagen = np.insert(imagen, imagen.shape[1], 0, axis=1)
imagen = np.insert(imagen, 0, 0, axis=0)
imagen = np.insert(imagen, imagen.shape[0], 0, axis=0)
i = i+1
【讨论】: