RandomCrop
Targets:
image
mask
bboxes
keypoints
volume
mask3d
Image Types:uint8, float32
Crop a random part of the input.
Arguments
heightint
height of the crop.
widthint
width of the crop.
pad_if_neededbool
false
Whether to pad if crop size exceeds image size. Default: False.
border_mode0 | 1 | 2 | 3 | 4
0
OpenCV border mode used for padding. Default: cv2.BORDER_CONSTANT.
filltuple[float, ...] | float
0
Padding value for images if border_mode is cv2.BORDER_CONSTANT. Default: 0.
fill_masktuple[float, ...] | float
0
Padding value for masks if border_mode is cv2.BORDER_CONSTANT. Default: 0.
pad_positioncenter | top_left | top_right | bottom_left | bottom_right | random
center
Position of padding. Default: 'center'.
pfloat
1
Probability of applying the transform. Default: 1.0.
Examples
>>> import numpy as np
>>> import albumentations as A
>>> import cv2
>>>
>>> # Prepare sample data
>>> image = np.random.randint(0, 256, (100, 100, 3), dtype=np.uint8)
>>> mask = np.random.randint(0, 2, (100, 100), dtype=np.uint8)
>>> bboxes = np.array([[10, 10, 50, 50], [40, 40, 80, 80]], dtype=np.float32)
>>> bbox_labels = [1, 2]
>>> keypoints = np.array([[20, 30], [60, 70]], dtype=np.float32)
>>> keypoint_labels = [0, 1]
>>>
>>> # Example 1: Basic random crop
>>> transform = A.Compose([
... A.RandomCrop(height=64, width=64),
... ], bbox_params=A.BboxParams(coord_format='pascal_voc', label_fields=['bbox_labels']),
... keypoint_params=A.KeypointParams(coord_format='xy', label_fields=['keypoint_labels']))
>>>
>>> # Apply the transform
>>> transformed = transform(
... image=image,
... mask=mask,
... bboxes=bboxes,
... bbox_labels=bbox_labels,
... keypoints=keypoints,
... keypoint_labels=keypoint_labels
... )
>>>
>>> # Get the transformed data
>>> transformed_image = transformed['image'] # Will be 64x64
>>> transformed_mask = transformed['mask'] # Will be 64x64
>>> transformed_bboxes = transformed['bboxes'] # Bounding boxes adjusted to the cropped area
>>> transformed_bbox_labels = transformed['bbox_labels'] # Labels for boxes that remain after cropping
>>> transformed_keypoints = transformed['keypoints'] # Keypoints adjusted to the cropped area
>>> transformed_keypoint_labels = transformed['keypoint_labels'] # Labels for keypoints that remain
>>>
>>> # Example 2: Random crop with padding when needed
>>> # This is useful when you want to crop to a size larger than some images
>>> transform_padded = A.Compose([
... A.RandomCrop(
... height=120, # Larger than original image height
... width=120, # Larger than original image width
... pad_if_needed=True,
... border_mode=cv2.BORDER_CONSTANT,
... fill=0, # Black padding for image
... fill_mask=0 # Zero padding for mask
... ),
... ], bbox_params=A.BboxParams(coord_format='pascal_voc', label_fields=['bbox_labels']),
... keypoint_params=A.KeypointParams(coord_format='xy', label_fields=['keypoint_labels']))
>>>
>>> # Apply the padded transform
>>> padded_transformed = transform_padded(
... image=image,
... mask=mask,
... bboxes=bboxes,
... bbox_labels=bbox_labels,
... keypoints=keypoints,
... keypoint_labels=keypoint_labels
... )
>>>
>>> # The result will be 120x120 with padding
>>> padded_image = padded_transformed['image']
>>> padded_mask = padded_transformed['mask']
>>> padded_bboxes = padded_transformed['bboxes'] # Coordinates adjusted to the new dimensionsNotes
If pad_if_needed is True and crop size exceeds image dimensions, the image will be padded before applying the random crop.