From 7982dd1a06bbcee3eb15a56aa55b8c18ebd2bf7c Mon Sep 17 00:00:00 2001 From: Charlyo <7512047+Charlyo@users.noreply.github.com> Date: Fri, 15 Apr 2022 08:05:32 +0200 Subject: [PATCH] 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 --- mmcv/image/geometric.py | 5 +++-- tests/test_image/test_geometric.py | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/mmcv/image/geometric.py b/mmcv/image/geometric.py index 75cee48d92..cf62ada733 100644 --- a/mmcv/image/geometric.py +++ b/mmcv/image/geometric.py @@ -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): diff --git a/tests/test_image/test_geometric.py b/tests/test_image/test_geometric.py index 4a924af465..308f96c1c3 100644 --- a/tests/test_image/test_geometric.py +++ b/tests/test_image/test_geometric.py @@ -461,6 +461,10 @@ def test_impad(self): 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)