Make sure padding size is not negative (#1792)

* Make sure padding size is not negative

If Resize maintains aspect ratio, could be the case that image shape is bigger than resize value.

* Test pad shape smaller than image shape

* Fix lint

* Remove whitespaces
This commit is contained in:
Charlyo 2022-04-15 08:05:32 +02:00 committed by GitHub
parent 74031cc508
commit 7982dd1a06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 2 deletions

View File

@ -460,7 +460,6 @@ def impad(img,
areas when padding_mode is 'constant'. Default: 0.
padding_mode (str): Type of padding. Should be: constant, edge,
reflect or symmetric. Default: constant.
- constant: pads with a constant value, this value is specified
with pad_val.
- edge: pads with the last value at the edge of the image.
@ -479,7 +478,9 @@ def impad(img,
assert (shape is not None) ^ (padding is not None)
if shape is not None:
padding = (0, 0, shape[1] - img.shape[1], shape[0] - img.shape[0])
width = max(shape[1] - img.shape[1], 0)
height = max(shape[0] - img.shape[0], 0)
padding = (0, 0, width, height)
# check pad_val
if isinstance(pad_val, tuple):

View File

@ -461,6 +461,10 @@ class TestGeometric:
with pytest.raises(AssertionError):
mmcv.impad(img, shape=(12, 15), padding=(0, 0, 5, 2))
# Pad shape smaller than image shape
padded_img = mmcv.impad(img, shape=(8, 8))
assert padded_img.shape == (10, 10, 3)
def test_impad_to_multiple(self):
img = np.random.rand(11, 14, 3).astype(np.float32)
padded_img = mmcv.impad_to_multiple(img, 4)