Yatayda Nesneler

 avatar
unknown
python
a year ago
4.0 kB
5
Indexable
import cv2
import numpy as np
import random
import os
import time

# Parametreler
canvas_w, canvas_h = 1100, 600
nesne_boyutu, nesne_aralik = 80, 5
nesne_adedi_min, nesne_adedi_max = 6, 12
sure_min, sure_max = 60, 300  # saniye cinsinden
hiz_seviyeleri = [1, 2, 3]  # Hız seviyeleri

# Emoji klasör yolu
emoji_klasor = 'emojis/'  # Burada 'emojiler' klasör adınız olmalı

# Arka plan rengini ayarla
arka_plan_rengi = (211, 211, 211)  # #D3D3D3

def load_emojis(emoji_klasor):
    emojiler = []
    for dosya_adi in os.listdir(emoji_klasor):
        if dosya_adi.endswith('.png'):
            emoji_yolu = os.path.join(emoji_klasor, dosya_adi)
            img = cv2.imread(emoji_yolu, cv2.IMREAD_UNCHANGED)
            if img is not None and img.shape[2] == 4:
                emojiler.append(img)
            else:
                print(f"Yüklenemeyen dosya: {dosya_adi}")
    return emojiler

def overlay_image(background, img, position):
    x, y = position
    h, w = img.shape[:2]

    # Arkaplanı geçerli piksel değerleriyle ayarlamak
    background_patch = background[y:y+h, x:x+w]

    # Arka plan yamasıyla aynı boyutlara sahip olan resim verilerini yeniden boyutlandırmak
    if background_patch.shape[0] != h or background_patch.shape[1] != w:
        return

    alpha_img = img[:, :, 3] / 255.0
    alpha_bg = 1.0 - alpha_img

    for c in range(0, 3):
        background[y:y+h, x:x+w, c] = (alpha_img * img[:, :, c] +
                                       alpha_bg * background[y:y+h, x:x+w, c])

def yatay_kayan_nesneler(nesne_adedi, nesne_hiz_ayari, sure):
    # Emoji yükle
    emojiler = load_emojis(emoji_klasor)
    if not emojiler:
        print("Emoji resimleri yüklenemedi!")
        return

    # Hız ayarını hesapla
    hiz = 750 // (2 ** (nesne_hiz_ayari - 1))

    # Nesne koordinatlarını ve hızlarını oluştur
    nesneler = []
    y = (canvas_h // 2) - (nesne_boyutu // 2)  # Merkezde hizalanma
    for i in range(nesne_adedi):
        emoji = random.choice(emojiler)
        x = -nesne_boyutu  # Nesneler başlangıçta ekranın dışında olacak
        nesneler.append({'emoji': emoji, 'x': x, 'y': y, 'hiz': hiz, 'start_time': time.time() + i * 0.5})  # 0.5 saniye arayla görünecekler

    # Pencereyi oluştur
    cv2.namedWindow("Tracking", cv2.WINDOW_NORMAL)
    cv2.resizeWindow("Tracking", canvas_w, canvas_h)

    start_time = cv2.getTickCount()
    while True:
        # Arka planı ayarla
        frame = np.full((canvas_h, canvas_w, 3), arka_plan_rengi, dtype=np.uint8)

        # Arka planda rectangle çiz
        rect_x1 = (canvas_w - ((nesne_adedi * nesne_boyutu) + ((nesne_adedi - 1) * nesne_aralik))) // 2
        rect_y1 = (canvas_h - nesne_boyutu) // 2
        cv2.rectangle(frame, (rect_x1, rect_y1), (rect_x1 + (nesne_adedi * nesne_boyutu) + ((nesne_adedi - 1) * nesne_aralik), rect_y1 + nesne_boyutu), arka_plan_rengi, -1)

        # Nesneleri güncelle ve ekrana çiz
        for nesne in nesneler:
            emoji = nesne['emoji']
            x, y = nesne['x'], nesne['y']
            if time.time() >= nesne['start_time']:  # Nesne belirli bir süre sonra görünür
                overlay_image(frame, emoji, (x, y))
                nesne['x'] += nesne['hiz']
                if nesne['x'] > canvas_w:
                    nesne['x'] = -nesne_boyutu

        # Süreyi kontrol et
        elapsed_time = (cv2.getTickCount() - start_time) / cv2.getTickFrequency()
        if elapsed_time > sure:
            break

        cv2.imshow("Tracking", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cv2.destroyAllWindows()

# Parametreler
nesne_adedi = random.randint(nesne_adedi_min, nesne_adedi_max)
nesne_hiz_ayari = random.choice(hiz_seviyeleri)
sure = random.randint(sure_min, sure_max)

yatay_kayan_nesneler(nesne_adedi=6, nesne_hiz_ayari=3, sure=60)
Editor is loading...
Leave a Comment