from PIL import Image
from tkinter import Tk, Canvas
import cv2
import time

cam = cv2.VideoCapture(0)
cv2.namedWindow("test") # otvor si kameru
t0 = time.time() # zacni merat cass
ti = []
cnt = 0
while cnt < 100: # urob 100 obrazkov za sebou a zapis si
    ret, frame = cam.read() # cas kedy boli urobene
    img_name = str(cnt)+".png"
    cv2.imwrite(img_name, frame)
    ti.append(time.time()-t0)
    print(img_name, "taken", time.time()-t0, "seconds from start")
    cnt += 1
cam.release() # zatvor kameru
cv2.destroyAllWindows()
window = Tk() # vytvor si Tkinter 
window.title("Roboticka Liga - meranie odporu vzduchu")
cw = 400
ch = 400
graf = Canvas(window, width=cw,height=ch)
graf.grid(column = 0, row = 0, rowspan=8)
graf.configure(background = "white")
print(ti)
g = []
cnt = 0
for t in range(10, 100): # spracuj obrazky
    im = Image.open(str(t)+".png") 
    w, h= im.size
    p = im.load() # otvor si aktualny obrazok
    print("Processing", str(t)+".png", "...")
    s = 0
    c = 0
    c2 = 0
    for i in range(80, w-20):
        for j in range(100, h-140):
            if p[i, j][0]*2 < p[i, j][2]+p[i, j][1]+20: #biely pixeli
                im.putpixel((i, j), (255, 255, 255))
            else: # cerveny pixel
                im.putpixel((i, j), (p[i, j][0], 0, 0))
                s += (255-p[i, j][0])*i
                c += (255-p[i, j][0])
                c2 += 1
    if c2 > 50:
        print(s, '/', c, '=', s/c, c2) # vypocitaj vazeny priemer
        g.append((ti[t], s/c)) # x-ovych suradnic pixelov
        # vykresli polohu a rychlost
        graf.create_rectangle((g[-1][0]-g[-cnt][0])*200, 400-g[-1][1]/2, (g[-1][0]-g[-cnt][0])*200, 400)
        if len(g) > 1:
            graf.create_rectangle(cnt*5, 400+(g[-1][1]-g[-2][1])/((g[-1][0]-g[-2][0])*100), cnt*5+5, 400, fill='red')
        kam = "e"+str(cnt)+".png"
        for i in range(h):
            im.putpixel((round(s/c), i), (255, 0, 0))
        print("Red ball detected! Saving as", kam)
        im.save(kam)
        cnt += 1
    elif cnt > 0: # ak uz cervena gula spadla, skonci
        break
print(g) # vypis polohu a cas gule na dalsie spracovanie
