diff --git a/mmcv/image/geometric.py b/mmcv/image/geometric.py index 75cee48d9..cf62ada73 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 4a924af46..308f96c1c 100644 --- a/tests/test_image/test_geometric.py +++ b/tests/test_image/test_geometric.py @@ -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)