mindspore.dataset.vision.FiveCrop

View Source On Gitee
class mindspore.dataset.vision.FiveCrop(size)[source]

Crop the given image into one central crop and four corners.

Parameters

size (Union[int, Sequence[int, int]]) – The size of the cropped image. If a single integer is provided, a square of size (size, size) will be cropped with this value. If a Sequence of length 2 is provided, an image of size (height, width) will be cropped.

Raises
  • TypeError – If size is not of type integer or Sequence of integer.

  • ValueError – If size is not positive.

Supported Platforms:

CPU

Examples

>>> import os
>>> import numpy as np
>>> from PIL import Image, ImageDraw
>>> import mindspore.dataset as ds
>>> import mindspore.dataset.vision as vision
>>> from mindspore.dataset.transforms import Compose
>>>
>>> # Use the transform in dataset pipeline mode
>>> class MyDataset:
...     def __init__(self):
...         self.data = []
...         img = Image.new("RGB", (300, 300), (255, 255, 255))
...         draw = ImageDraw.Draw(img)
...         draw.ellipse(((0, 0), (100, 100)), fill=(255, 0, 0), outline=(255, 0, 0), width=5)
...         img.save("./1.jpg")
...         data = np.fromfile("./1.jpg", np.uint8)
...         self.data.append(data)
...
...     def __getitem__(self, index):
...         return self.data[0]
...
...     def __len__(self):
...         return 5
>>>
>>> my_dataset = MyDataset()
>>> generator_dataset = ds.GeneratorDataset(my_dataset, column_names="image")
>>> transforms_list = Compose([vision.Decode(to_pil=True),
...                            vision.FiveCrop(size=200),
...                            # 4D stack of 5 images
...                            lambda *images: np.stack([vision.ToTensor()(image) for image in images])])
>>> # apply the transform to dataset through map function
>>> generator_dataset = generator_dataset.map(operations=transforms_list, input_columns="image")
>>> for item in generator_dataset.create_dict_iterator(num_epochs=1, output_numpy=True):
...     print(item["image"].shape, item["image"].dtype)
...     break
(5, 3, 200, 200) float32
>>> os.remove("./1.jpg")
>>>
>>> # Use the transform in eager mode
>>> img = Image.new("RGB", (300, 300), (255, 255, 255))
>>> draw = ImageDraw.Draw(img)
>>> draw.polygon([(50, 50), (150, 50), (100, 150)], fill=(0, 255, 0), outline=(0, 255, 0))
>>> img.save("./2.jpg")
>>> data = Image.open("./2.jpg")
>>> output = vision.FiveCrop(size=20)(data)
>>> for cropped_img in output:
...     print(cropped_img.size)
...     break
(20, 20)
>>> os.remove("./2.jpg")
Tutorial Examples: