Está en la página 1de 2

import cv2

import numpy as np
import random
import time
from tqdm import tqdm

def create_random_pixel_video(original_image, output_video):


img = cv2.imread(original_image)
height, width, _ = img.shape

# Obtener los valores únicos de píxeles presentes en la imagen original


unique_pixels = np.unique(img.reshape(-1, 3), axis=0)

# Crear una copia de la imagen original


modified_img = img.copy()

# Crear el objeto VideoWriter para guardar el nuevo video


fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter(output_video, fourcc, 30.0, (width, height))

# Lista para almacenar los píxeles que han vuelto a su valor original
original_pixels = []

# Iniciar el contador de tiempo


start_time = time.time()

# Calcular el número total de píxeles


total_pixels = height * width

# Utilizar tqdm para mostrar el progreso


with tqdm(total=total_pixels, unit="pixel") as pbar:
while True:
# Mover al azar los píxeles que aún no han vuelto a su valor original
for y in range(height):
for x in range(width):
if (x, y) not in original_pixels:
random_pixel = random.choice(unique_pixels)
modified_img[y, x] = random_pixel

# Actualizar el progreso
pbar.update(1)

# Verificar si se ha alcanzado la imagen original


if np.array_equal(img, modified_img):
break

# Obtener los píxeles que han vuelto a su valor original en esta


iteración
restored_pixels = [(x, y) for y in range(height) for x in range(width)
if np.array_equal(img[y, x], modified_img[y, x])]

# Actualizar la lista de píxeles que han vuelto a su valor original


original_pixels.extend(restored_pixels)

# Escribir el fotograma modificado en el video de salida


out.write(modified_img)

# Detener el contador de tiempo y calcular la duración


end_time = time.time()
duration = end_time - start_time

# Liberar los recursos


out.release()
cv2.destroyAllWindows()

print("New video created!")


print("Duration: {:.2f} seconds".format(duration))

# Ejemplo de uso:
create_random_pixel_video("NUEVO3.PNG", "random_pixel_video3.avi")

También podría gustarte