diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-08-21 15:33:30 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-08-21 15:33:30 +0200 |
| commit | 9a61719a820b98a64bfc52228e05721a043dc91b (patch) | |
| tree | 74434556fbbb69e601fdbf667c6b5898654a1359 /rpc | |
| parent | 1599de57b53c78ac05965fe7038f3a8d67c1a3c0 (diff) | |
fade sequence
Diffstat (limited to 'rpc')
| -rw-r--r-- | rpc/img_ops.py | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/rpc/img_ops.py b/rpc/img_ops.py index 6be1d0b..e25afb1 100644 --- a/rpc/img_ops.py +++ b/rpc/img_ops.py @@ -66,6 +66,13 @@ def process_image(opt, data_opt, im): img = np.add(array_a, array_b).astype('uint8') return img +def mix(frac, a, b): + frac_a = frac + frac_b = 1.0 - frac_a + array_a = np.multiply(a.astype('float64'), frac_a) + array_b = np.multiply(b.astype('float64'), frac_b) + return np.add(array_a, array_b).astype('uint8') + last_im = None def mix_next_image(opt, data_opt, rpc_client, im, i=0, sequence, sequence_i=0, skip_i=0): global last_im @@ -115,12 +122,18 @@ def mix_next_image(opt, data_opt, rpc_client, im, i=0, sequence, sequence_i=0, s image_pil.save(tmp_path) os.rename(tmp_path, current_path) + recursive_frac = data_opt.recursive_frac + sequence_frac = data_opt.sequence_frac + if data_opt.sequence_skip > 0 and data_opt.fade_sequence > 0: + sequence_frac *= (1.0 - (skip_i * data_opt.fade_sequence) / (data_opt.sequence_skip - 1)) + sequence_frac = max(0, min(sequence_frac, 1)) + if data_opt.recursive and last_im is not None: - if data_opt.sequence and len(sequence): + if data_opt.sequence and len(sequence) and sequence_frac > 0: A_img = Image.open(sequence_path).convert('RGB') A_im = np.asarray(A_img) - frac_a = data_opt.recursive_frac - frac_b = data_opt.sequence_frac + frac_a = recursive_frac + frac_b = sequence_frac frac_sum = frac_a + frac_b if frac_sum > 1.0: frac_a = frac_a / frac_sum @@ -138,29 +151,21 @@ def mix_next_image(opt, data_opt, rpc_client, im, i=0, sequence, sequence_i=0, s next_im = array_abc.astype('uint8') else: - frac_a = data_opt.recursive_frac - frac_b = 1.0 - frac_a - array_a = np.multiply(last_im.astype('float64'), frac_a) - array_b = np.multiply(im.astype('float64'), frac_b) - next_im = np.add(array_a, array_b).astype('uint8') + next_im = mix(data_opt.recursive_frac, last_im, im) if data_opt.recurse_roll != 0: last_im = np.roll(im, data_opt.recurse_roll, axis=data_opt.recurse_roll_axis) else: last_im = next_im.copy().astype('uint8') - elif data_opt.sequence and len(sequence): + elif data_opt.sequence and len(sequence) and sequence_frac > 0: A_img = Image.open(sequence_path).convert('RGB') A_im = np.asarray(A_img) - frac_b = data_opt.sequence_frac + sequence_frac = data_opt.sequence_frac if data_opt.transition: t = lerp(math.sin(i / data_opt.transition_period * math.pi * 2.0 ) / 2.0 + 0.5, data_opt.transition_min, data_opt.transition_max) - frac_b *= 1.0 - t - frac_c = 1.0 - frac_b - array_b = np.multiply(A_im.astype('float64'), frac_b) - array_c = np.multiply(im.astype('float64'), frac_c) - array_bc = np.add(array_b, array_c) - next_im = array_bc.astype('uint8') + sequence_frac *= 1.0 - t + next_im = mix(sequence_frac, A_im, im) else: last_im = im.copy().astype('uint8') |
