From c7e7bd6c70d54e234a5db66487568ae2b9c5d4ba Mon Sep 17 00:00:00 2001 From: Krzysztof Strzelecki Date: Thu, 13 Feb 2020 22:47:50 +0100 Subject: [PATCH] implementacja wykrywania poruszajacych sie pojazdow --- main.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/main.py b/main.py index d727f10..fb346b8 100644 --- a/main.py +++ b/main.py @@ -26,6 +26,39 @@ while True: cv2.imshow("czarnobialy", gray) # wyswietlanie filmu w skali szarosci fgMask = sub.apply(gray) # uzycie background subtraction cv2.imshow("fgMask", fgMask) + # operacje morfologiczne. Wg tutoriala na docs.opencv.org. Opening, closing - usuwanie szumów + kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # kernel to apply to the morphology + closing = cv2.morphologyEx(fgMask, cv2.MORPH_CLOSE, kernel) + #cv2.imshow("closing", closing) + opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel) + #cv2.imshow("opening", opening) + dilation = cv2.dilate(opening, kernel) + #cv2.imshow("dilation", dilation) + retvalbin, bins = cv2.threshold(dilation, 220, 255, cv2.THRESH_BINARY) # Thresholding/binaryzacja obrazu usuwanie cieni + #cv2.imshow('bins',bins) + # obrysowywanie + contours, hierarchy = cv2.findContours(bins, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # RETR_EXTERNAL - bierz pod uwage najbardziej 'zewnetrzne' kontury + + minContourSize = 400 + maxContourSize = 50000 + + for i in range(len(contours)): # przejdz wszystkie kontury w kadrze + if hierarchy[0, i, 3] == -1: # uzycie hierarchii zeby uwzgledniac tylko "rodzicow" (najbardziej zewnetrzne kontury) + area = cv2.contourArea(contours[i]) + if minContourSize < area < maxContourSize: # nie obrysowuj zbyt duzych i malych obiektow + # obliczanie centoidu konturu (czyli srodka) za pomoca tzw "momentow" + centroid = contours[i] + moments = cv2.moments(centroid) + cx = int(moments['m10'] / moments['m00']) + cy = int(moments['m01'] / moments['m00']) + + # punkty graniczne (bounding points) konturu. x,y to wspolrzedne lewego gornego rogu, w,h to szerokosc i wysokosc prostokata + x, y, w, h = cv2.boundingRect(centroid) + # utworz prostokat wokol konturu + cv2.rectangle(input_vid, (x, y), (x + w, y + h), (255, 0, 0), 2) + + cv2.imshow("wykryte pojazdy", input_vid) + key = cv2.waitKey(60) if key == 27: #Wyjdz po nacisnieciu escape