コード例 #1
0
ファイル: recogsort.c プロジェクト: 0ximDigital/appsScanner
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;
}
コード例 #2
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;
}