l_int32 main(int argc, char **argv) { char *boxatxt; l_int32 i; BOXA *boxa1, *boxa2, *boxa3; BOXAA *baa, *baa1; NUMAA *naa1; PIX *pixdb, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2, *pixa3, *pixat; L_RECOG *recog; L_RECOGA *recoga; SARRAY *sa1; /* ----- Example identifying samples using training data ----- */ #if 1 /* Read the training data */ pixat = pixaRead("recog/sets/train06.pa"); recog = recogCreateFromPixa(pixat, 0, 0, L_USE_ALL, 128, 1); recoga = recogaCreateFromRecog(recog); pixaDestroy(&pixat); /* Read the data from all samples */ pix1 = pixRead("recog/sets/samples06.png"); boxatxt = pixGetText(pix1); boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt)); pixa1 = pixaCreateFromBoxa(pix1, boxa1, NULL); pixDestroy(&pix1); /* destroys boxa1 */ /* Identify components in the sample data */ pixa2 = pixaCreate(0); pixa3 = pixaCreate(0); for (i = 0; i < 9; i++) { /* if (i != 4) continue; */ /* dots form separate boxa */ /* if (i != 8) continue; */ /* broken 2 in '24' */ pix1 = pixaGetPix(pixa1, i, L_CLONE); /* Show the 2d box data in the sample */ boxa2 = pixConnComp(pix1, NULL, 8); baa = boxaSort2d(boxa2, NULL, 6, 6, 5); pix2 = boxaaDisplay(baa, 3, 1, 0xff000000, 0x00ff0000, 0, 0); pixaAddPix(pixa3, pix2, L_INSERT); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Get the numbers in the sample */ recogaIdentifyMultiple(recoga, pix1, 0, 5, 3, &boxa3, NULL, &pixdb, 0); sa1 = recogaExtractNumbers(recoga, boxa3, 0.7, -1, &baa1, &naa1); sarrayWriteStream(stderr, sa1); boxaaWriteStream(stderr, baa1); numaaWriteStream(stderr, naa1); pixaAddPix(pixa2, pixdb, L_INSERT); /* pixaWrite("/tmp/pixa.pa", pixa2); */ pixDestroy(&pix1); boxaDestroy(&boxa3); boxaaDestroy(&baa1); numaaDestroy(&naa1); sarrayDestroy(&sa1); } pix3 = pixaDisplayLinearly(pixa2, L_VERT, 1.0, 0, 20, 1, NULL); pixWrite("/tmp/pix3.png", pix3, IFF_PNG); pix4 = pixaDisplayTiledInRows(pixa3, 32, 1500, 1.0, 0, 20, 2); pixDisplay(pix4, 500, 0); pixWrite("/tmp/pix4.png", pix4, IFF_PNG); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixa1); boxaDestroy(&boxa1); recogaDestroy(&recoga); #endif return 0; }
//--------------------------------------------------------------------------- //выстраивает все изображения по вертикали и записывает в файл //filename - имя файла для записи //fields - поля, которые необходимо совместить (через запятую0 //width - ширина до которой идёт ресайз изображения //height - высота до которой идёт ресайз изображения // примечание - задание width height меняет пропорцию изображения // если width = 0, height != 0 , то идёт пропорциональный ресайз всего изображения до height // если height = 0, width != 0 , то идёт пропорциональный ресайз всего изображения до width //proportion - флаг пропорционального ресайза изображения согласно заданным width и height // примечение // proportion!=0 пропорциональный ресайз // если компонент width=0 или height=0 то он игнорируется // width, height - устанавливают максимальное(!) значение // proportion=0 НЕпропорциональный ресайз // действует только при height!=0 и width!=0 //proportion - =0 если необходимо НЕпропорциональное уменьшение согласно заданным width и height //ImageFormat - файловый формат ("tiffG4", "tiffZIP", "png", "bmp", "jpg") //--------------------------------------------------------------------------- l_int32 LeptonicaProccesingDrawing::debugOutputImage(string filename, string fields, l_int32 width, l_int32 height, l_int32 proportion, string ImageFormat) { /*pixWriteMemBmp pixWriteStreamBmp pixWriteTiff pixWriteStreamTiff pixFillMapHoles */ PIX *pix, *pixM, *pixR; PIXA *pixa; l_int32 result; l_int32 format; l_int32 w, h; double dW, dH; LEP_LOG("enter"); SetNULL(3, (void**)&pix, &pixM, &pixa); try { pixa = pixaCreate(3); LEP_STR_THROW(!pixa, "Ошибка создания pixa"); vector<string> VN = split(fields, ','); for (unsigned int n = 0; n < VN.size(); n++) { pix = GetPixFromSTR(VN[n]); if (pix) pixaAddPix(pixa, pix, L_COPY); } pixM = pixaDisplayLinearly(pixa, L_VERT, 1, 0, 10, 8, NULL); LEP_STR_THROW(!pixM, "Ошибка создания совмещения pixa"); if ((proportion == 0) || (width == 0) || (height == 0) ) { pixR = pixScaleToSize(pixM, width, height); LEP_STR_THROW(!pixR, "Ошибка изменения размера"); } else { w = 0; h = 0; dW = pixM->w / (double)width; dH = pixM->h / (double)height; if (dW > dH) w = width; else h = height; pixR = pixScaleToSize(pixM, w, h); LEP_STR_THROW(!pixR, "Ошибка изменения размера"); } if (ImageFormat == "tiffG4") format = IFF_TIFF_G4; if (ImageFormat == "tiffZIP") format = IFF_TIFF_ZIP; if (ImageFormat == "png") format = IFF_PNG; if (ImageFormat == "bmp") format = IFF_BMP; if (ImageFormat == "jpg") format = IFF_JFIF_JPEG; result = pixWrite(filename.c_str(), pixR, format); LEP_STR_THROW(result != 0, "Ошибка создания совмещения pixa"); }catch (string error) { LEP_ERROR(error); }; pixDestroy(&pixM); pixaDestroy(&pixa); LEP_LOG("exit"); return 0; }