有没有办法在填充后保留图像的像素值?
Is there a way to preserve pixel values of an image after padding?
我正在处理两张具有不同形状的图像 im0
和 im1
(512, 512,3) 和 ( 217, 317, 3) 分别。我想在较小的图像上添加填充,以使其与另一幅图像大小相同,但在使用
之后
im1 = cv2.copyMakeBorder( im1, top = 200, bottom = 95, left = 100, right = 95, borderType=cv2.BORDER_CONSTANT)
我在图像数组中得到 0 个值
print(im1)
[[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]...
并且由于像
这样的填充,我期望得到现有值加上一些 0
[[ 34 58 36]
[ 39 63 41]
[ 40 64 42]
...
[ 47 81 116]
[ 47 81 118]
[ 47 81 118]]
[[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
...
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]]
有谁知道如何解决这个问题,这样我就可以同时拥有现有值和填充值?
您可以为此使用 np.pad
。
示例:
import numpy as np
img = np.arange(25).reshape((5,5))
desired_height = 7
desired_width = 8
pad_value = 0
height, width = img.shape
print(img)
if height % desired_height != 0:
padding = ((0, desired_height - (height % desired_height)), (0, 0))
img = np.pad(img, padding, mode="constant", constant_values=pad_value)
if width % desired_width != 0:
padding = ((0, 0), (0, desired_width - (width % desired_width)))
img = np.pad(img, padding, mode="constant", constant_values=pad_value)
print(img)
输出:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
[[ 0 1 2 3 4 0 0 0]
[ 5 6 7 8 9 0 0 0]
[10 11 12 13 14 0 0 0]
[15 16 17 18 19 0 0 0]
[20 21 22 23 24 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]]
我正在处理两张具有不同形状的图像 im0
和 im1
(512, 512,3) 和 ( 217, 317, 3) 分别。我想在较小的图像上添加填充,以使其与另一幅图像大小相同,但在使用
im1 = cv2.copyMakeBorder( im1, top = 200, bottom = 95, left = 100, right = 95, borderType=cv2.BORDER_CONSTANT)
我在图像数组中得到 0 个值
print(im1)
[[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]...
并且由于像
这样的填充,我期望得到现有值加上一些 0 [[ 34 58 36]
[ 39 63 41]
[ 40 64 42]
...
[ 47 81 116]
[ 47 81 118]
[ 47 81 118]]
[[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
...
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]]
有谁知道如何解决这个问题,这样我就可以同时拥有现有值和填充值?
您可以为此使用 np.pad
。
示例:
import numpy as np
img = np.arange(25).reshape((5,5))
desired_height = 7
desired_width = 8
pad_value = 0
height, width = img.shape
print(img)
if height % desired_height != 0:
padding = ((0, desired_height - (height % desired_height)), (0, 0))
img = np.pad(img, padding, mode="constant", constant_values=pad_value)
if width % desired_width != 0:
padding = ((0, 0), (0, desired_width - (width % desired_width)))
img = np.pad(img, padding, mode="constant", constant_values=pad_value)
print(img)
输出:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
[[ 0 1 2 3 4 0 0 0]
[ 5 6 7 8 9 0 0 0]
[10 11 12 13 14 0 0 0]
[15 16 17 18 19 0 0 0]
[20 21 22 23 24 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]]