From a697e25f06f7e870e591faa935eae6b3d8b3d3f0 Mon Sep 17 00:00:00 2001 From: Mathieu Beligon <mathieu@feedly.com> Date: Sat, 28 Mar 2020 22:47:48 -0400 Subject: [PATCH] [runes] (blender) Add background cropping --- .../research/dataset/blend/image_blender.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/robots-at-runes/research/dataset/blend/image_blender.py b/robots-at-runes/research/dataset/blend/image_blender.py index 4136200..969394a 100644 --- a/robots-at-runes/research/dataset/blend/image_blender.py +++ b/robots-at-runes/research/dataset/blend/image_blender.py @@ -12,10 +12,12 @@ from research.dataset.labeled_image import LabeledImage, PointOfInterest @dataclass class ImageBlender: - modifiers: List[LabeledImageModifierABC] + background_size: Tuple[int, int] + object_modifiers: List[LabeledImageModifierABC] def blend(self, background: Image, obj: LabeledImage) -> LabeledImage: obj = self._modify_object(obj) + background = self._crop_background(background) x, y = self._generate_position_of_object(background.shape, obj.image.shape) return LabeledImage( image=self._blend_obj_on_background(background, obj.image, x, y), @@ -23,7 +25,7 @@ class ImageBlender: ) def _modify_object(self, obj: LabeledImage) -> LabeledImage: - for modifier in self.modifiers: + for modifier in self.object_modifiers: obj = modifier.randomly_modify(obj) return obj @@ -56,6 +58,11 @@ class ImageBlender: def _translate_poi(poi: PointOfInterest, x: int, y: int) -> PointOfInterest: return PointOfInterest(poi.x + x, poi.y + y) + def _crop_background(self, background: Image) -> Image: + h, w, _ = background.shape + x, y = int(random() * (h - self.background_size[1])), int(random() * (w - self.background_size[0])) + return background[y : y + self.background_size[1], x : x + self.background_size[0], :] + if __name__ == "__main__": from pathlib import Path @@ -73,7 +80,9 @@ if __name__ == "__main__": ) _bg = cv2.cvtColor(cv2.imread(str(EXAMPLES_DIR / "back1.jpg")), cv2.COLOR_BGR2RGB) - _blender = ImageBlender([LabeledImageScaler(1.5), LabeledImageRotator(180)]) + _blender = ImageBlender( + background_size=(1_280, 720), object_modifiers=[LabeledImageScaler(1.5), LabeledImageRotator(180)] + ) for i in range(10): res = _blender.blend(_bg, _obj) -- GitLab