Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2025, 06:42   #31
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 322
По умолчанию

Корчое есть у меня ещё одна идея незнаю первый ли я такое делаю в мире короче создать приложение которое разделяет изображение на плитки порезанные равномерно а дальше случайно их перемещать между собой, и сделать код что-бы разделить все кадры всего видео на плитки, и все плитки каждого кадра, и перемешать между собой случайным образом. Вот код:
Код:
import cv2
import numpy as np
import tkinter as tk
from tkinter import filedialog
import os
import random
from PIL import Image

def load_image(image_path):
    """Загружает изображение с использованием Pillow и преобразует в массив NumPy для OpenCV."""
    try:
        img = Image.open(image_path)
        img = img.convert("RGB")  # Преобразуем изображение в RGB
        return np.array(img)  # Возвращаем массив
    except Exception as e:
        print(f"Ошибка при загрузке изображения: {e}")
        return None

def shuffle_image(image_path, output_image_path):
    # Загружаем изображение
    image = load_image(image_path)
    
    # Проверка на успешность загрузки изображения
    if image is None:
        print(f"Не удалось загрузить изображение: {image_path}")
        return

    # Проверьте количество каналов (должно быть 3 для RGB)
    if len(image.shape) < 3 or image.shape[2] != 3:
        print(f"Неподдерживаемый формат изображения: {image_path}. Изображение должно иметь 3 канала (RGB).")
        return

    height, width, _ = image.shape
    
    # Убедимся, что при делении на 2, мы корректно разбиваем на 4 плитки
    h, w = height // 2, width // 2

    # Переписываем плитки, чтобы гарантировать, что мы имеем 4 плитки
    tiles = [
        image[0:h, 0:w],        # Верхняя левая плитка
        image[0:h, w:width],    # Верхняя правая плитка
        image[h:height, 0:w],   # Нижняя левая плитка
        image[h:height, w:width] # Нижняя правая плитка
    ]

    # Перемешивание плиток
    random.shuffle(tiles)

    # Собираем плитки обратно в одно изображение
    shuffled_image = np.vstack((np.hstack((tiles[0], tiles[1])), np.hstack((tiles[2], tiles[3]))))

    # Сохраняем перемешанное изображение
    cv2.imwrite(output_image_path, shuffled_image)
    print(f"Создано перемешанное изображение: {output_image_path}")

def select_image():
    file_path = filedialog.askopenfilename(title="Выберите изображение файл", 
                                           filetypes=[("Image Files", "*.png;*.jpg;*.jpeg;*.bmp;*.gif")])
    if file_path:
        output_path = os.path.join(os.path.expanduser("~"), "Desktop", "shuffled_image.jpg")
        shuffle_image(file_path, output_path)

# Создание графического интерфейса
root = tk.Tk()
root.title("Перемешиватель изображений")
root.geometry("320x120")  # Установка размера окна

select_image_button = tk.Button(root, text="Выбрать изображение", command=select_image)
select_image_button.pack(pady=10)

# Запустить основной цикл интерфейса
root.mainloop()

Последний раз редактировалось MakarovDs; 17.01.2025 в 07:57.
MakarovDs вне форума Ответить с цитированием
Старый 17.01.2025, 08:26   #32
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 322
По умолчанию

Вот теперь мы сделали это с видео:

Код:
import tkinter as tk
from tkinter import filedialog
import numpy as np
import pygame
from threading import Thread
from PIL import Image, ImageTk
from moviepy.editor import VideoFileClip
import random
import cv2

video_clip = None
audio_clip = None

def load_video(video_path):
    global video_clip, audio_clip
    video_clip = VideoFileClip(video_path)
    audio_clip = video_clip.audio

def play_sound():
    global audio_clip
    sample_rate = 44100
    pygame.mixer.init(frequency=sample_rate, size=-16, channels=1)

    while True:
        start_time = random.uniform(0, audio_clip.duration - 1)
        end_time = min(start_time + 1, audio_clip.duration)  # 1-секундный фрагмент

        audio_segment = audio_clip.subclip(start_time, end_time)
        audio_segment_array = audio_segment.to_soundarray(fps=sample_rate)

        sound = (audio_segment_array * 32767).astype(np.int16)
        pygame.mixer.Sound(buffer=sound.tobytes()).play()

        pygame.time.delay(1000)  # Пауза на 1 секунду перед воспроизведением следующего

def shuffle_frame(frame):
    height, width, _ = frame.shape

    # Убедимся, что при делении на 2, мы корректно разбиваем на 4 плитки
    h, w = height // 2, width // 2

    # Переписываем плитки, чтобы гарантировать, что мы имеем 4 плитки
    tiles = [
        frame[0:h, 0:w],        # Верхняя левая плитка
        frame[0:h, w:width],    # Верхняя правая плитка
        frame[h:height, 0:w],   # Нижняя левая плитка
        frame[h:height, w:width] # Нижняя правая плитка
    ]

    # Перемешивание плиток
    random.shuffle(tiles)

    # Собираем плитки обратно в одно изображение
    shuffled_frame = np.vstack((np.hstack((tiles[0], tiles[1])), np.hstack((tiles[2], tiles[3]))))

    return shuffled_frame

def display_random_frame():
    if video_clip:
        start_time = random.uniform(0, video_clip.duration - 1)
        frame = video_clip.get_frame(start_time)

        # Преобразование массива в изображение PIL
        frame_image = Image.fromarray(frame)

        # Изменение размера изображения, чтобы оно подходило под canvas
        frame_image = frame_image.resize((640, 480), Image.LANCZOS)  # Масштабируем изображение с использованием LANCZOS

        # Преобразование изображения PIL в массив numpy
        frame_array = np.array(frame_image)

        # Перемешивание кадра
        shuffled_frame = shuffle_frame(frame_array)

        # Преобразование массива numpy обратно в изображение PIL
        shuffled_frame_image = Image.fromarray(shuffled_frame)

        # Изменение размера изображения, чтобы оно подходило под canvas
        shuffled_frame_image = shuffled_frame_image.resize((640, 480), Image.LANCZOS)  # Масштабируем изображение с использованием LANCZOS

        # Преобразование изображения PIL в изображение PhotoImage
        shuffled_frame_photo = ImageTk.PhotoImage(shuffled_frame_image)

        # Обновление canvas с новым изображением
        canvas.create_image(0, 0, anchor=tk.NW, image=shuffled_frame_photo)
        canvas.image = shuffled_frame_photo  # Сохранение ссылки на изображение, чтобы избежать сборки мусора

    # Запланировать обновление через 1000 мс (1 секунда)
    canvas.after(1000, display_random_frame)

def start_audio_and_video(video_path):
    load_video(video_path)
    Thread(target=play_sound, daemon=True).start()  # Запуск звука в отдельном потоке
    display_random_frame()  # Запуск отображения случайных кадров

def select_video():
    file_path = filedialog.askopenfilename(title="Выберите видео файл")  
    if file_path:
        start_audio_and_video(file_path)

# Создание графического интерфейса
root = tk.Tk()
root.title("Random EVP Video Generator")

canvas = tk.Canvas(root, width=640, height=480)
canvas.pack()

select_button = tk.Button(root, text="Выбрать видео", command=select_video)
select_button.pack()

# Запустить основной цикл интерфейса
root.mainloop()
Пример использования

Последний раз редактировалось MakarovDs; 17.01.2025 в 08:38.
MakarovDs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация симуляции банкомата A7A7A7 Общие вопросы C/C++ 0 15.09.2023 23:48
Технологии симуляции жизни в играх Человек_Борща Свободное общение 6 22.11.2013 14:59
Создание большого 3D мира ardor Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 02.03.2012 00:14
Создание катры мира (от Яндекса) с помощью Дельфи Alex Cones Общие вопросы Delphi 2 27.05.2009 09:16
Компьютерное моделирование. Создание модели движения тел по определенной траектории. AnaVare Помощь студентам 7 18.03.2009 05:09