Exemplo n.º 1
0
    def _filtro_area(baldosa):
        """En base al promedio, retira elementos que podrían no ser letras

        Returns:
            baldosa_gris, filtrados: Baldosa en escala de grises y contornos
                filtrados por su área.
        """
        gris = cv2.cvtColor(baldosa, cv2.COLOR_BGR2GRAY)
        umbrales = generar_umbrales(baldosa, 13, 6, 31, 4)
        contornos = hallar_contornos(umbrales,
                                     cv2.RETR_TREE,
                                     cv2.CHAIN_APPROX_NONE)
        filtrados = []
        if len(contornos) > 5:
            areas = [cv2.contourArea(c) for c in contornos]
            d_areas = np.array(areas)
            mu = d_areas.mean()
            sigma = d_areas.std()
            for contorno, area in zip(contornos, areas):
                if mu - sigma < area < mu - 0.09*sigma:
                    filtrados.append(contorno)
        # tmp = baldosa.copy()
        # dibujar_contornos(tmp, filtrados)
        # cv2.imshow('seg', tmp)
        # cv2.waitKey()

        return gris, filtrados
Exemplo n.º 2
0
    def __contornos(self):
        """Obtener contornos de la imagen."""
        umbrales = generar_umbrales(self.imagen, 13, 6, 31, 4)
        contornos = hallar_contornos(umbrales, cv2.RETR_TREE,
                                     cv2.CHAIN_APPROX_NONE)

        # if __debug__:
        #     print('2. Contornos')
        #     img_tmp = self.imagen.copy()
        #     dibujar_contornos(img_tmp, contornos)
        #     cv2.imshow('det', img_tmp)
        #     cv2.waitKey()

        return contornos
Exemplo n.º 3
0
    def __contornos(self):
        """Obtener contornos de la imagen."""
        umbrales = generar_umbrales(self.imagen, 13, 6, 31, 4)
        contornos = hallar_contornos(umbrales,
                                     cv2.RETR_TREE,
                                     cv2.CHAIN_APPROX_NONE)

        # if __debug__:
        #     print('2. Contornos')
        #     img_tmp = self.imagen.copy()
        #     dibujar_contornos(img_tmp, contornos)
        #     cv2.imshow('det', img_tmp)
        #     cv2.waitKey()

        return contornos
Exemplo n.º 4
0
    def filtro_d(self, contorno):
        """Filtro por número de contornos internos. Pretende estimar
        la cantidad de posibles letras."""
        x, y, dx, dy = cv2.boundingRect(contorno)
        baldosa = self.imagen[y:(y+dy), x:(x+dx)]
        umbrales = generar_umbrales(baldosa, 35, 7, 39, 5)
        mezcla = [cv2.findContours(umbral,
                                   cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[0]
                  for umbral in umbrales]

        for contornos in mezcla:
            if len(contornos) < 6:
                return False

        return True
Exemplo n.º 5
0
    def filtro_d(self, contorno):
        """Filtro por número de contornos internos. Pretende estimar
        la cantidad de posibles letras."""
        x, y, dx, dy = cv2.boundingRect(contorno)
        baldosa = self.imagen[y:(y + dy), x:(x + dx)]
        umbrales = generar_umbrales(baldosa, 35, 7, 39, 5)
        mezcla = [
            cv2.findContours(umbral, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[0]
            for umbral in umbrales
        ]

        for contornos in mezcla:
            if len(contornos) < 6:
                return False

        return True