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
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
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
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