def _shear_img(self, results, magnitude, direction='horizontal', interpolation='bilinear'): """Shear the image. Args: results (dict): Result dict from loading pipeline. magnitude (int | float): The magnitude used for shear. direction (str): The direction for shear, either "horizontal" or "vertical". interpolation (str): Same as in :func:`mmcv.imshear`. """ for key in results.get('img_fields', ['img']): img = results[key] img_sheared = mmcv.imshear(img, magnitude, direction, border_value=self.img_fill_val, interpolation=interpolation) results[key] = img_sheared.astype(img.dtype)
def test_imshear(self): img = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]).astype(np.uint8) assert_array_equal(mmcv.imshear(img, 0), img) # magnitude=1, horizontal img_sheared = np.array([[1, 2, 3], [0, 4, 5], [0, 0, 7]], dtype=np.uint8) assert_array_equal(mmcv.imshear(img, 1), img_sheared) # magnitude=-1, vertical img_sheared = np.array([[1, 5, 9], [4, 8, 0], [7, 0, 0]], dtype=np.uint8) assert_array_equal(mmcv.imshear(img, -1, 'vertical'), img_sheared) # magnitude=1, vertical, borderValue=100 borderValue = 100 img_sheared = np.array( [[1, borderValue, borderValue], [4, 2, borderValue], [7, 5, 3]], dtype=np.uint8) assert_array_equal(mmcv.imshear(img, 1, 'vertical', borderValue), img_sheared) # magnitude=1, vertical, borderValue=100, img shape (h,w,3) img = np.stack([img, img, img], axis=-1) img_sheared = np.stack([img_sheared, img_sheared, img_sheared], axis=-1) assert_array_equal(mmcv.imshear(img, 1, 'vertical', borderValue), img_sheared) # test tuple format of borderValue assert_array_equal( mmcv.imshear(img, 1, 'vertical', (borderValue, borderValue, borderValue)), img_sheared) # test invalid length of borderValue with pytest.raises(AssertionError): mmcv.imshear(img, 0.5, 'horizontal', (borderValue, )) # test invalid type of borderValue with pytest.raises(ValueError): mmcv.imshear(img, 0.5, 'horizontal', [borderValue]) # test invalid value of direction with pytest.raises(AssertionError): mmcv.imshear(img, 0.5, 'diagonal')