Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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