void Segmentar(int x1, int y1, int x2, int y2, int n, int& k) { if (k && (x1 + 1 < x2 || y1 + 1 < y2)) { if (x2 - x1 > y2 - y1) { int m = (x1 + x2) / 2; --k; int p = UsarApp(x1, y1, m, y2); if (p) Segmentar(x1, y1, m, y2, p, k); if (n - p) Segmentar(m, y1, x2, y2, n - p, k); } else { int m = (y1 + y2) / 2; --k; int p = UsarApp(x1, y1, x2, m); if (p) Segmentar(x1, y1, x2, m, p, k); if (n - p) Segmentar(x1, m, x2, y2, n - p, k); } } else for (int i = x1; i < x2; ++i) for (int j = y1; j < y2; ++j) if (n) n -= TirarRed(i, j, i + 1, j + 1); }
void ExtractTexto::runExtract(std::string const path, Tipo_OCR OCR_type ){ // Paso 1. Leer la imagen objetivo if ( !leerImagen(path) ) return; // Paso 2. Establecer el tipo de OCR a aplicar OBJECT_OCR *Objeto_OCR = setTipoOCR( OCR_type ); if ( !Objeto_OCR ) return; // Paso 3. Obtener Regiones de Interés en la imagen cargada, donde es probable localizar // dorsales. DNR_Regiones.setDorsalROI(imagenEntrada); // Paso 4. Segmentar las ROIs obteniendo posibles cajas de texto conteniendo el número del dorsal for( long unsigned int j = 0; j < DNR_Regiones.size(); j++ ){ cv::Mat imagenROI(imagenEntrada, DNR_Regiones.getROI(j)), imagenPreprocesada; PreprocesarImagen( imagenROI, imagenPreprocesada ); Segmentar( imagenPreprocesada, cajasDeTextos ); ReconocimientoDorsal( imagenPreprocesada, cajasDeTextos, dorsales, Objeto_OCR); DNR_Regiones.setDorsal(j, dorsales); } // Paso 5. Crear una imagen nueva incluyendo las detecciones imprimirDetecciones(imagenSalida, DNR_Regiones , AZUL); // Paso 6. Liberar la memoria asignada. liberarRecursosImagen(); Objeto_OCR = NULL; }
void Pescar(int w, int h, int n, int k) { Segmentar(0, 0, w, h, n, k); }