如何使用 numpy.pad 用 RGB 值填充 RGB 图像
How to pad a RGB image with RGB values using numpy.pad
我正在尝试用 np.pad
填充品红色 (255, 0, 255) 颜色的 RGB 图像。但是在使用 RGB 值作为 constant_values
时出现错误。例如:
import numpy as np
from scipy.misc import face
import matplotlib.pyplot as plt
def pad_img(img, pad_with):
pad_value = max(img.shape[:-1])
img_padded = np.pad(img,
((0, (pad_value - img.shape[0])), # pad bottom
(0, (pad_value - img.shape[1])), # pad right
(0, 0)), # don't pad channels
mode='constant',
constant_values=pad_with)
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(img)
ax2.imshow(img_padded)
plt.show()
这很好用(用白色填充):
img = face()
pad_img(img, pad_with=255)
这不是(用洋红色填充):
img = face()
pad_img(img, pad_with=(255, 0, 255))
投掷:
ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (3,) and requested shape (3,2)
我想你要找的是:
img = face()
pad_img(img, pad_with=(((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)))
根据 numpy doc constant_values
的形式为:
((before_1, after_1), ... (before_N, after_N))
而且我认为这就是为什么错误说它的形状是 (3,)
((255, 0, 255)
) for pad_width
而它请求的形状是 (3,2)
((((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0))
)
我正在尝试用 np.pad
填充品红色 (255, 0, 255) 颜色的 RGB 图像。但是在使用 RGB 值作为 constant_values
时出现错误。例如:
import numpy as np
from scipy.misc import face
import matplotlib.pyplot as plt
def pad_img(img, pad_with):
pad_value = max(img.shape[:-1])
img_padded = np.pad(img,
((0, (pad_value - img.shape[0])), # pad bottom
(0, (pad_value - img.shape[1])), # pad right
(0, 0)), # don't pad channels
mode='constant',
constant_values=pad_with)
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(img)
ax2.imshow(img_padded)
plt.show()
这很好用(用白色填充):
img = face()
pad_img(img, pad_with=255)
这不是(用洋红色填充):
img = face()
pad_img(img, pad_with=(255, 0, 255))
投掷:
ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (3,) and requested shape (3,2)
我想你要找的是:
img = face()
pad_img(img, pad_with=(((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0)))
根据 numpy doc constant_values
的形式为:
((before_1, after_1), ... (before_N, after_N))
而且我认为这就是为什么错误说它的形状是 (3,)
((255, 0, 255)
) for pad_width
而它请求的形状是 (3,2)
((((255, 0, 255), (255, 0, 255)), ((255, 0, 255), (255, 0, 255)), (0, 0))
)