有没有办法在填充后保留图像的像素值?

Is there a way to preserve pixel values of an image after padding?

我正在处理两张具有不同形状的图像 im0im1 (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]]