Facebook
From Buff Partdridge, 2 Months ago, written in Python.
Embed
Download Paste or View Raw
Hits: 42
  1. import cv2
  2. from pyimagesearch.shapedetector import ShapeDetector
  3. import numpy as np
  4. from skimage.measure import compare_ssim
  5. import argparse
  6. import imutils
  7. import operator
  8.  
  9.  
  10. # Nale┼╝y wskaza─ç ┼Ťcie┼╝k─Ö do pliku wideo
  11. cap = cv2.VideoCapture('C:\\Users\\mateu\\Desktop\\badanie canon\\test2.mp4')
  12.  
  13. # Pierwsza klatka traktowana jest inaczej ni┼╝ pozosta┼ée. B─Öd─ů do niej por├│wnywane wszystkie kolejne
  14. is_first_frame_caputed = False;
  15.  
  16. # Okre┼Ťlenie obszaru filmu jaki ma by─ç analizowany
  17. upper_left = (1050, 200)
  18. bottom_right = (1300, 450)
  19.  
  20. # Utworzenie listy z wynikami
  21. wynik = []
  22.  
  23. # Sprawdzenie czy obraz z kamery został otworzony poprawnie
  24. if (cap.isOpened() == False):
  25.     print("B┼é─ůd otwarcia, upewnij si─Ö ┼╝e plik jest poprawny")
  26.  
  27. #Pętla analizuje film klata po klatce dopóki nie dojedzie do samego końca filmu
  28. while (cap.isOpened()):
  29.     # Klatki filmu s─ů zapisywane pojedynczo klatka po klatce do zmiennej
  30.     ret, image_frame = cap.read()
  31.     # Sprawdzenie czy pierwsza klatka zosta┼éa przechwycona
  32.     if is_first_frame_caputed == False:
  33.         # Pierwsza przechwycona klatka zostaje zapisana do zmiennej
  34.         first_frame = image_frame
  35.         # Zatwierdzenie wcze┼Ťniej podanej przestrzeni do analizy, inaczej region zainteresowania
  36.         before  = first_frame[upper_left[1]: bottom_right[1], upper_left[0]: bottom_right[0]]
  37.         # Przetworzenie obrazu na odcienie szaro┼Ťci w celu ┼éatwiejszej analizy
  38.         img_first_frame = cv2.cvtColor(before, cv2.COLOR_BGR2GRAY)
  39.         # Tresholding - granica przy kt├│rej traktujemy co┼Ť jako czarne albo bia┼ée. W tym wypadku 175 przy skali do 255
  40.         ret, before_gray  = cv2.threshold(img_first_frame, 175, 255, cv2.THRESH_BINARY_INV)
  41.         # Zako┼äczono przetwarzanie pierwszej klatki, mo┼╝na przej┼Ť─ç dalej
  42.         is_first_frame_caputed = True
  43.  
  44.         # Wczytanie drugiej klatki filmu
  45.         ret, image_frame = cap.read()
  46.     # Sprawdzenie czy istnieje kojena klatka
  47.     if ret == True:
  48.         # Zatwierdzenie wcze┼Ťniej podanej przestrzeni do analizy, inaczej region zainteresowania
  49.         after  = image_frame[upper_left[1]: bottom_right[1], upper_left[0]: bottom_right[0]]
  50.         # Przetworzenie obrazu na odcienie szaro┼Ťci w celu ┼éatwiejszej analizy
  51.         img = cv2.cvtColor(after , cv2.COLOR_BGR2GRAY)
  52.         # Tresholding - granica przy kt├│rej traktujemy co┼Ť jako czarne albo bia┼ée. W tym wypadku 175 przy skali do 255
  53.         ret, after_gray  = cv2.threshold(img, 175, 255, cv2.THRESH_BINARY_INV)
  54.  
  55.         # Wyszukiwanie kontur├│w figur na obrazku i ich zaznaczenie
  56.         contours, h = cv2.findContours(after_gray, 1, 2)
  57.         # Ka┼╝dy znaleziony kontur jest analizowany
  58.         for cnt in contours:
  59.         # cnt-punkty, kt├│re wyznaczaj─ů kontur, True-dok┼éadno┼Ť─ç zarysowywania, True-zakolorowanie ┼Ťrodka
  60.             approx = cv2.approxPolyDP(cnt, 0.01 * cv2.arcLength(cnt, True), True)
  61.             if len(approx) == 4 :
  62.  
  63.                 # Wyszukiwanie ┼Ťrodka konturu
  64.                 M = cv2.moments(cnt)
  65.                 # Je┼Ťli ┼Ťrodek jest r├│zny od zera
  66.                 if M["m00"] != 0:
  67.                     # Sk┼éadowe punktu ┼Ťrodkowgo
  68.                     cX = int(M["m10"] / M["m00"])
  69.                     cY = int(M["m01"] / M["m00"])
  70.                 else:
  71.                     cX, cY = 0, 0
  72.                 # Wybierane s─ů tylko kontury wi─Öksze od 500
  73.                 if cv2.contourArea(approx) < 500:
  74.                     continue
  75.                 # Kontur kolorowany jest na czarno z wype┼énieniem
  76.                 cv2.drawContours(img, [cnt], 0, (0, 0, 255), -1)
  77.                 # Oznaczenie punktu w ┼Ťrodku na bia┼éo
  78.                 cv2.circle(img, (cX, cY), 1, (255, 255, 255), -1)
  79.                 # Napis srodek obok punktu
  80.                 cv2.putText(img, "Srodek", (cX - 20, cY - 20),
  81.                 # Wyb├│r czcionki do napisu
  82.                 cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
  83.  
  84.         # Wy┼Ťwietlanie wynik├│w w konsoli
  85.         print(cY,)
  86.         # Wy┼Ťwietlanie listy wynik├│w
  87.         wynik.append(cY)
  88.         #Lista wynik├│w zostaje zapisana do wskazanego pliku .txt
  89.         with open("C:\\Users\\mateu\\Desktop\\studia\\wyniki.txt", "w") as f:
  90.             for s in wynik:
  91.                 f.write(str(s) + "\n")
  92.  
  93.         # Podgl─ůd wideo w okienku wraz z wykonywanymi operacjami
  94.         cv2.imshow('marker', img)
  95.  
  96.         # Je┼Ťli analiza ma by─ç przerwana w trakcie nacisn─ů─ç q
  97.         if cv2.waitKey(25) & 0xFF == ord('q'):
  98.             break
  99.  
  100.     # Przerwanie p─Ötli
  101.     else:
  102.         break
  103.  
  104. #Nie pozwala otwiera─ç filmu w trakcie odczytu
  105. cap.release()
  106.  
  107. # Zamykanie wsystkich okien, które zostały otwarte
  108. cv2.destroyAllWindows()
  109.  
  110.