def _next_frame(self, frame_index: int, im1: image_types, im2: image_types,
                    **params) -> dict:
        print('BlendingTransition::_next_frame STARTS HERE')
        result = locals()

        im1 = utils.verify_alpha_channel(
            utils.convert_image_type(im1, np.ndarray))
        im2 = utils.verify_alpha_channel(
            utils.convert_image_type(im2, np.ndarray))

        print('im1:', type(im1), '\tim2:', type(im2))

        # im1 = PilImage.blend(im1=im1, im2=im2, alpha=frame_index/self.frames_count)
        # print(f'\nSIZES: {utils.get_image_size(im1)} ; {utils.get_image_size(im2)}')

        frame_resolution = params.get('frame_resolution', (1920, 1080))
        print('frame_resolution:', frame_resolution)

        # im1 = cv2.addWeighted(im1, frame_index/self.frames_count, im2, frame_index/self.frames_count, 0.5)
        ts = blend_images_effect(im2,
                                 im1,
                                 frame_index / self.frames_count,
                                 1 - frame_index / self.frames_count,
                                 resolution=frame_resolution)
        result['to_save'] = ts
        result['im1'] = im1
        result['im2'] = im2
        print('BlendingTransition::_next_frame ENDS HERE')
        return result
Esempio n. 2
0
    def set_image(self, image_inst):
        curr_size = utils.get_image_size(self.image)
        next_size = utils.get_image_size(image_inst)

        if curr_size != next_size:
            image_inst = cv2.resize(utils.convert_image_type(image_inst, numpy.ndarray), curr_size)
            image_inst = utils.convert_image_type(image_inst, type(image_inst))

        self.image = image_inst
Esempio n. 3
0
 def _preprocess(self, first_image: image_types, second_image: image_types,
                 frame_index: int) -> tuple:
     # print('>> Preprocess effects...')
     return (self._assign_next_effect(utils.convert_image_type(
         source_image=first_image, dest_type=self.kwargs['load_as']),
                                      process_name='preprocess_first',
                                      frame_index=frame_index),
             self._assign_next_effect(utils.convert_image_type(
                 source_image=second_image,
                 dest_type=self.kwargs['load_as']),
                                      process_name='preprocess_second',
                                      frame_index=frame_index))
Esempio n. 4
0
    def _next_frame(self, frame_index: int, im1: image_types, im2: image_types,
                    **params) -> dict:
        print('bt next_frame')
        result = locals()

        im1 = utils.convert_image_type(im1, PillowImage)
        im2 = utils.convert_image_type(im2, PillowImage)

        im1 = PilImage.blend(im1=im1,
                             im2=im2,
                             alpha=frame_index / self.frames_count)
        result['to_save'] = im1

        return result
    def _assign_next_effect(self,
                            image: image_types,
                            image_param_name='image',
                            process_name='preprocess_first',
                            frame_index=0):
        # print('_assign_next_efect: ' + process_name)

        if 'process_name' not in self.effects:
            return image

        cl: utils.CircleList = self.effects[process_name]
        call_back: utils.Callback = cl.next()

        if isinstance(call_back, utils.Callback):
            if call_back.needs_param('frame_index'):
                call_back.add_one_arg('frame_index', frame_index)
            if call_back.needs_param('im1'):
                call_back.add_one_arg('im1', image)
            if call_back.needs_param('im2'):
                call_back.add_one_arg('im2', image)

        image = call_back.__call__(**{image_param_name: image})

        if isinstance(image, dict):
            image = image['to_save']

        return utils.convert_image_type(source_image=image,
                                        dest_type=self.kwargs['load_as'])
Esempio n. 6
0
    def reload(self, **kwargs) -> True or utils.image_types:
        """
        Reloads image from drive with other params than in __init__
        :keyword kwargs:
            :key image_type:  PIL.Image.Image or numpy.ndarray, or passed in __init__
            :key resolution:  new resolution or passed in __init__
            :key return_image: if passed and set to True, method returns reloaded image, else returns True
        :return: look above
        """
        self.image = utils.load_image(self.init_params['full_path'], self.init_params['image_type'])
        resolution = self.init_params['kwargs']['resolution']
        image_type = kwargs.get('image_type', self.init_params['image_type'])

        if kwargs.get('resolution', None) is not None:
            resolution = kwargs['resolution']

        if resolution is not None:
            print('ImageHandler reloading, resize to', resolution)
            loaded_image_size = utils.get_image_size(self.image)
            if loaded_image_size != resolution:
                self.image = utils.convert_image_type(
                    source_image=cv_effects.cut_rect(
                        image=self.image,
                        src_box=(0, 0, *loaded_image_size),
                        size=resolution
                    ),
                    dest_type=image_type
                )
        self.init_params['reload_params'] = kwargs
        if kwargs.get('return_image', None) is not None:
            return self.image
        return True
Esempio n. 7
0
def resize_image(image: image_types, dest_image_type: image_types or None = None, dest_resolution=(1920, 1080)):
    if not isinstance(dest_resolution, (list, tuple)):
        if not len(dest_resolution) == 2:
            raise ValueError('dest_resolution must be list/tuple of len 2. i.e. dest_resolution(720, 576)')
    resized = cv2.resize(utils.load_image(image, np.ndarray), dest_resolution)
    if dest_image_type is None:
        return resized
    return utils.convert_image_type(resized, dest_resolution)
Esempio n. 8
0
def cut_rect(image: image_types, src_box: list or tuple, size: list or tuple = (1920, 1080)) -> np.ndarray:

    if len(src_box) != 4:
        raise AttributeError('cv_effects.cut_rect param src_box must be tuple of 4 (x1, y1, x2, y2)')
    if len(size) != 2:
        raise AttributeError('cv_effects.cut_rect param size must be tuple of 2 (width, height)')

    x1, y1, x2, y2 = src_box
    w, h = abs(x2 - x1), abs(y2 - y1)

    image = utils.convert_image_type(image, np.ndarray)
    crop_img = image[y1:y1 + h, x1:x1 + w]

    return cv2.resize(crop_img, dsize=size)
Esempio n. 9
0
    def __init__(
            self,
            full_path: str,
            image_type: utils.image_types = numpy.ndarray,
            **kwargs):
        """

        :param full_path: full path to image on drive
        :param image_type: PIL.Image.Image or numpy.ndarray
        :keyword kwargs:
            :key load: loads image to RAM, pass True value for it
            :key resolution: tuple (width, height) that tells to handle rescaled image
            :key frame_indexes: list/tuple of ints describing positions on timeline where image should occur
            :key uid_setter: instance of such class with method set_next_uid() -> str
        """

        kwargs['frame_indexes'] = kwargs.get('frame_indexes', [0])
        self.init_params = locals()
        self.uid = None

        if kwargs.get('uid_setter', False):
            uid_setter = kwargs['uid_setter']
            if hasattr(uid_setter, 'set_next_uid'):
                uid_setter = getattr(uid_setter, 'set_next_uid')
                if callable(uid_setter):
                    self.uid = uid_setter()

        self.image = False if not kwargs.get('load', False) else utils.load_image(
            image_or_path=full_path,
            result_type=image_type
        )

        if 'resolution' in kwargs:
            if self.image is not False:
                self.image = utils.load_image(self.image, numpy.ndarray)
                size = utils.get_image_size(self.image)
                if size != kwargs['resolution']:
                    print('ImageHandler resize resolution to', kwargs['resolution'])
                    input('enter...')
                    self.image = cv2.resize(self.image, kwargs['resolution'])

                self.image = utils.convert_image_type(self.image, image_type)
Esempio n. 10
0
    def pick_image_for_frame(self, frame_index: int = -1) -> List[utils.image_types, int]:
        if frame_index == -1:
            # print(f'Wizard::pick_image() for frame {frame_index} ==> (default) = {self.global_frame_index}')
            frame_index = self.global_frame_index

        closest,  result_handler_id = self.total_slide_duration, None
        for handler_id, image_handler in enumerate(self.image_handlers):
            indexes = image_handler.get_frame_indexes()

            if frame_index >= indexes[0]:
                dist = frame_index - indexes[0]
                if dist < closest:
                    closest, result_handler_id = dist, handler_id
        if result_handler_id is None:
            raise ValueError('No such image')
        result = self.image_handlers[result_handler_id].get_image()
        print(f'picked image.index = {result_handler_id}, with shape:', utils.get_image_size(result))
        return [
            cv2.resize(utils.convert_image_type(result, numpy.ndarray), self.frame_resolution),
            result_handler_id
        ]
Esempio n. 11
0
                                    intensity=0.3,
                                    red=10,
                                    green=100,
                                    blue=0)
import cv2

cv2.imshow('name', im)
cv2.waitKey()
cv2.destroyAllWindows()
exit()

import numpy

im = utils.load_image('source_images/1.jpg', PIL.Image.Image)
print('type after loading ', type(im))
print('type after conv    ', type(utils.convert_image_type(im,
                                                           numpy.ndarray)))  #
exit()

from effects.elasticdeform_effect import elastic_transform

elastic_transform(r'C:\proj\py\rw\source_images\3.jpg', 0.1, 20).show()
exit()

from effects.pixelate_effect import pixelate

pixelate("source_images/1.jpg", 256).show()
exit()

from effects.sketch_effect import sketch_v4

sk = sketch_v4("source_images/1.jpg")