def __find_biggest_contour(contours): """ Wybiera z konturów ten o największej powierzchni. :param contours: Hierarchia konturów. :return: Największy znaleziony kontur. """ if len(contours) > 1: max_area, contour_index = ContourDetector.area(contours[0]), 0 for index in range(len(contours)): area = ContourDetector.area(contours[index]) if area > max_area: max_area, contour_index = area, index cnt = contours[contour_index] return cnt elif len(contours) == 1: # TODO nie wiem czy ma być index return contours[0] else: return None
def calculate_area(mask: np.ndarray): """ Oblicza pole powierzchni bocznej obiektu. Rozmiar obiektu jest obliczny na podstawie ilosci pixeli obiektu. razy przelicznik pixele na metry. :param np.ndarray mask: Binarna maska obrazu. :return: Pole powierzchni bocznej karoserii pojazdu. :rtype: float """ # Znajdź kontury samochodu. contours = ContourDetector.find(mask) # Wyszkuaj kontur o największym polu. cnt = SizeMeasurment.__find_biggest_contour(contours) # Oblicz pole konturu. area = ContourDetector.area(cnt) ratio = Classyfication.get_ratio() area = round(area*ratio*ratio, 2) return area