本文整理汇总了C++中pixaDestroy函数的典型用法代码示例。如果您正苦于以下问题:C++ pixaDestroy函数的具体用法?C++ pixaDestroy怎么用?C++ pixaDestroy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pixaDestroy函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: RotateTest
void
RotateTest(PIX *pixs,
l_float32 scale,
L_REGPARAMS *rp) {
l_int32 w, h, d, outformat;
PIX *pixt1, *pixt2, *pixt3, *pixd;
PIXA *pixa;
pixGetDimensions(pixs, &w, &h, &d);
outformat = (d == 8 || d == 32) ? IFF_JFIF_JPEG : IFF_PNG;
pixa = pixaCreate(0);
pixt1 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h);
pixSaveTiled(pixt1, pixa, scale, 1, 20, 32);
pixt2 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_BLACK, w, h);
pixSaveTiled(pixt2, pixa, scale, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0);
pixSaveTiled(pixt1, pixa, scale, 1, 20, 0);
pixt2 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_BLACK, 0, 0);
pixSaveTiled(pixt2, pixa, scale, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h);
pixSaveTiled(pixt1, pixa, scale, 1, 20, 0);
pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_BLACK, w, h);
pixSaveTiled(pixt2, pixa, scale, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0);
pixSaveTiled(pixt1, pixa, scale, 1, 20, 0);
pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_BLACK, 0, 0);
pixSaveTiled(pixt2, pixa, scale, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixd = pixaDisplay(pixa, 0, 0);
regTestWritePixAndCheck(rp, pixd, outformat);
pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display);
pixDestroy(&pixd);
pixaDestroy(&pixa);
pixa = pixaCreate(0);
pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h);
pixSaveTiled(pixt1, pixa, scale, 1, 20, 32);
pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_BLACK, w, h);
pixSaveTiled(pixt2, pixa, scale, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0);
pixSaveTiled(pixt1, pixa, scale, 1, 20, 0);
pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_BLACK, 0, 0);
pixSaveTiled(pixt2, pixa, scale, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
if (pixGetDepth(pixs) == 1)
pixt1 = pixScaleToGray2(pixs);
else
pixt1 = pixClone(pixs);
pixt2 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, w, h);
pixSaveTiled(pixt2, pixa, scale, 1, 20, 0);
pixt3 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, w, h);
pixSaveTiled(pixt3, pixa, scale, 0, 20, 0);
pixDestroy(&pixt2);
pixDestroy(&pixt3);
pixt2 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0);
pixSaveTiled(pixt2, pixa, scale, 1, 20, 0);
pixt3 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, 0, 0);
pixSaveTiled(pixt3, pixa, scale, 0, 20, 0);
pixDestroy(&pixt2);
pixDestroy(&pixt3);
pixDestroy(&pixt1);
pixd = pixaDisplay(pixa, 0, 0);
regTestWritePixAndCheck(rp, pixd, outformat);
pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display);
pixDestroy(&pixd);
pixaDestroy(&pixa);
return;
}
开发者ID:mehulsbhatt,项目名称:MyOCRTEST,代码行数:81,代码来源:rotate2_reg.c
示例2: main
l_int32 main(int argc,
char **argv)
{
l_int32 size, i, rval, gval, bval, yval, uval, vval;
l_float32 *a[3], b[3];
L_BMF *bmf;
PIX *pixd;
PIXA *pixa;
/* Explore the range of rgb --> yuv transforms. All rgb
* values transform to a valid value of yuv, so when transforming
* back we get the same rgb values that we started with. */
pixa = pixaCreate(0);
bmf = bmfCreate("fonts", 6);
for (gval = 0; gval <= 255; gval += 20)
AddTransformsRGB(pixa, bmf, gval);
pixd = pixaDisplayTiledAndScaled(pixa, 32, 755, 1, 0, 20, 2);
pixDisplay(pixd, 100, 0);
pixWrite("/tmp/yuv1.png", pixd, IFF_PNG);
pixDestroy(&pixd);
pixaDestroy(&pixa);
/* Now start with all "valid" yuv values, not all of which are
* related to a valid rgb value. Our yuv --> rgb transform
* clips the rgb components to [0 ... 255], so when transforming
* back we get different values whenever the initial yuv
* value is out of the rgb gamut. */
pixa = pixaCreate(0);
for (yval = 16; yval <= 235; yval += 16)
AddTransformsYUV(pixa, bmf, yval);
pixd = pixaDisplayTiledAndScaled(pixa, 32, 755, 1, 0, 20, 2);
pixDisplay(pixd, 600, 0);
pixWrite("/tmp/yuv2.png", pixd, IFF_PNG);
pixDestroy(&pixd);
pixaDestroy(&pixa);
bmfDestroy(&bmf);
/* --------- Try out a special case by hand, and show that --------- *
* ------- the transform matrices we are using are inverses ---------*/
/* First, use our functions for the transform */
fprintf(stderr, "Start with: yval = 143, uval = 79, vval = 103\n");
convertYUVToRGB(143, 79, 103, &rval, &gval, &bval);
fprintf(stderr, " ==> rval = %d, gval = %d, bval = %d\n", rval, gval, bval);
convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval);
fprintf(stderr, " ==> yval = %d, uval = %d, vval = %d\n", yval, uval, vval);
/* Next, convert yuv --> rbg by solving for rgb --> yuv transform.
* [ a00 a01 a02 ] r = b0 (y - 16)
* [ a10 a11 a12 ] * g = b1 (u - 128)
* [ a20 a21 a22 ] b = b2 (v - 128)
*/
b[0] = 143.0 - 16.0; /* y - 16 */
b[1] = 79.0 - 128.0; /* u - 128 */
b[2] = 103.0 - 128.0; /* v - 128 */
for (i = 0; i < 3; i++)
a[i] = (l_float32 *)lept_calloc(3, sizeof(l_float32));
a[0][0] = 65.738 / 256.0;
a[0][1] = 129.057 / 256.0;
a[0][2] = 25.064 / 256.0;
a[1][0] = -37.945 / 256.0;
a[1][1] = -74.494 / 256.0;
a[1][2] = 112.439 / 256.0;
a[2][0] = 112.439 / 256.0;
a[2][1] = -94.154 / 256.0;
a[2][2] = -18.285 / 256.0;
fprintf(stderr, "Here's the original matrix: yuv --> rgb:\n");
for (i = 0; i < 3; i++)
fprintf(stderr, " %7.3f %7.3f %7.3f\n", 256.0 * a[i][0],
256.0 * a[i][1], 256.0 * a[i][2]);
gaussjordan(a, b, 3);
fprintf(stderr, "\nInput (yuv) = (143,79,103); solve for rgb:\n"
"rval = %7.3f, gval = %7.3f, bval = %7.3f\n",
b[0], b[1], b[2]);
fprintf(stderr, "Here's the inverse matrix: rgb --> yuv:\n");
for (i = 0; i < 3; i++)
fprintf(stderr, " %7.3f %7.3f %7.3f\n", 256.0 * a[i][0],
256.0 * a[i][1], 256.0 * a[i][2]);
/* Now, convert back: rgb --> yuv;
* Do this by solving for yuv --> rgb transform.
* Use the b[] found previously (the rgb values), and
* the a[][] which now holds the rgb --> yuv transform. */
gaussjordan(a, b, 3);
fprintf(stderr, "\nInput rgb; solve for yuv:\n"
"yval = %7.3f, uval = %7.3f, vval = %7.3f\n",
b[0] + 16.0, b[1] + 128.0, b[2] + 128.0);
fprintf(stderr, "Inverting the matrix again: yuv --> rgb:\n");
for (i = 0; i < 3; i++)
fprintf(stderr, " %7.3f %7.3f %7.3f\n", 256.0 * a[i][0],
256.0 * a[i][1], 256.0 * a[i][2]);
for (i = 0; i < 3; i++) lept_free(a[i]);
return 0;
}
开发者ID:0xkasun,项目名称:Dummy_Tes,代码行数:98,代码来源:yuvtest.c
示例3: bleft
/**
* Auto page segmentation. Divide the page image into blocks of uniform
* text linespacing and images.
*
* Width, height and resolution are derived from the input image.
*
* If the pix is non-NULL, then it is assumed to be the input, and it is
* copied to the image, otherwise the image is used directly.
*
* The output goes in the blocks list with corresponding TO_BLOCKs in the
* to_blocks list.
*
* If single_column is true, then no attempt is made to divide the image
* into columns, but multiple blocks are still made if the text is of
* non-uniform linespacing.
*/
int Tesseract::AutoPageSeg(int width, int height, int resolution,
bool single_column, IMAGE* image,
BLOCK_LIST* blocks, TO_BLOCK_LIST* to_blocks) {
int vertical_x = 0;
int vertical_y = 1;
TabVector_LIST v_lines;
TabVector_LIST h_lines;
ICOORD bleft(0, 0);
Boxa* boxa = NULL;
Pixa* pixa = NULL;
// The blocks made by the ColumnFinder. Moved to blocks before return.
BLOCK_LIST found_blocks;
#ifdef HAVE_LIBLEPT
if (pix_binary_ != NULL) {
if (textord_debug_images) {
Pix* grey_pix = pixCreate(width, height, 8);
// Printable images are light grey on white, but for screen display
// they are black on dark grey so the other colors show up well.
if (textord_debug_printable) {
pixSetAll(grey_pix);
pixSetMasked(grey_pix, pix_binary_, 192);
} else {
pixSetAllArbitrary(grey_pix, 64);
pixSetMasked(grey_pix, pix_binary_, 0);
}
AlignedBlob::IncrementDebugPix();
pixWrite(AlignedBlob::textord_debug_pix().string(), grey_pix, IFF_PNG);
pixDestroy(&grey_pix);
}
if (tessedit_dump_pageseg_images)
pixWrite("tessinput.png", pix_binary_, IFF_PNG);
// Leptonica is used to find the lines and image regions in the input.
LineFinder::FindVerticalLines(resolution, pix_binary_,
&vertical_x, &vertical_y, &v_lines);
LineFinder::FindHorizontalLines(resolution, pix_binary_, &h_lines);
if (tessedit_dump_pageseg_images)
pixWrite("tessnolines.png", pix_binary_, IFF_PNG);
ImageFinder::FindImages(pix_binary_, &boxa, &pixa);
if (tessedit_dump_pageseg_images)
pixWrite("tessnoimages.png", pix_binary_, IFF_PNG);
// Copy the Pix to the IMAGE.
image->FromPix(pix_binary_);
if (single_column)
v_lines.clear();
}
#endif
TO_BLOCK_LIST land_blocks, port_blocks;
TBOX page_box;
// The rest of the algorithm uses the usual connected components.
find_components(blocks, &land_blocks, &port_blocks, &page_box);
TO_BLOCK_IT to_block_it(&port_blocks);
ASSERT_HOST(!to_block_it.empty());
for (to_block_it.mark_cycle_pt(); !to_block_it.cycled_list();
to_block_it.forward()) {
TO_BLOCK* to_block = to_block_it.data();
TBOX blkbox = to_block->block->bounding_box();
if (to_block->line_size >= 2) {
// Note: if there are multiple blocks, then v_lines, boxa, and pixa
// are empty on the next iteration, but in this case, we assume
// that there aren't any interesting line separators or images, since
// it means that we have a pre-defined unlv zone file.
ColumnFinder finder(static_cast<int>(to_block->line_size),
blkbox.botleft(), blkbox.topright(),
&v_lines, &h_lines, vertical_x, vertical_y);
if (finder.FindBlocks(height, resolution, single_column,
to_block, boxa, pixa, &found_blocks, to_blocks) < 0)
return -1;
finder.ComputeDeskewVectors(&deskew_, &reskew_);
boxa = NULL;
pixa = NULL;
}
}
#ifdef HAVE_LIBLEPT
boxaDestroy(&boxa);
pixaDestroy(&pixa);
#endif
blocks->clear();
BLOCK_IT block_it(blocks);
// Move the found blocks to the input/output blocks.
block_it.add_list_after(&found_blocks);
if (textord_debug_images) {
//.........这里部分代码省略.........
开发者ID:gmavenis,项目名称:tesseractstuff,代码行数:101,代码来源:pagesegmain.cpp
示例4: main
int main(int argc,
char **argv)
{
l_int32 i, n, binsize, binstart, nbins;
l_float32 pi, val, angle, xval, yval, x0, y0, rank, startval, fbinsize;
l_float32 minval, maxval, meanval, median, variance, rankval;
GPLOT *gplot;
NUMA *na, *nahisto, *nax, *nay, *nap, *nasx, *nasy;
NUMA *nadx, *nady, *nafx, *nafy, *na1, *na2, *na3, *na4;
PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pixd;
PIXA *pixa;
static char mainName[] = "numa1_reg";
if (argc != 1)
return ERROR_INT(" Syntax: numa1_reg", mainName, 1);
lept_mkdir("lept/numa1");
/* -------------------------------------------------------------------*
* Histograms *
* -------------------------------------------------------------------*/
#if DO_ALL
pi = 3.1415926535;
na = numaCreate(5000);
for (i = 0; i < 500000; i++) {
angle = 0.02293 * i * pi;
val = (l_float32)(999. * sin(angle));
numaAddNumber(na, val);
}
nahisto = numaMakeHistogramClipped(na, 6, 2000);
nbins = numaGetCount(nahisto);
nax = numaMakeSequence(0, 1, nbins);
gplot = gplotCreate("/tmp/lept/numa1/histo1", GPLOT_PNG, "example histo 1",
"i", "histo[i]");
gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine");
gplotMakeOutput(gplot);
gplotDestroy(&gplot);
numaDestroy(&nax);
numaDestroy(&nahisto);
nahisto = numaMakeHistogram(na, 1000, &binsize, &binstart);
nbins = numaGetCount(nahisto);
nax = numaMakeSequence(binstart, binsize, nbins);
fprintf(stderr, " binsize = %d, binstart = %d\n", binsize, binstart);
gplot = gplotCreate("/tmp/lept/numa1/histo2", GPLOT_PNG, "example histo 2",
"i", "histo[i]");
gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine");
gplotMakeOutput(gplot);
gplotDestroy(&gplot);
numaDestroy(&nax);
numaDestroy(&nahisto);
nahisto = numaMakeHistogram(na, 1000, &binsize, NULL);
nbins = numaGetCount(nahisto);
nax = numaMakeSequence(0, binsize, nbins);
fprintf(stderr, " binsize = %d, binstart = %d\n", binsize, 0);
gplot = gplotCreate("/tmp/lept/numa1/histo3", GPLOT_PNG, "example histo 3",
"i", "histo[i]");
gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine");
gplotMakeOutput(gplot);
gplotDestroy(&gplot);
numaDestroy(&nax);
numaDestroy(&nahisto);
nahisto = numaMakeHistogramAuto(na, 1000);
nbins = numaGetCount(nahisto);
numaGetParameters(nahisto, &startval, &fbinsize);
nax = numaMakeSequence(startval, fbinsize, nbins);
fprintf(stderr, " binsize = %7.4f, binstart = %8.3f\n",
fbinsize, startval);
gplot = gplotCreate("/tmp/lept/numa1/histo4", GPLOT_PNG, "example histo 4",
"i", "histo[i]");
gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine");
gplotMakeOutput(gplot);
gplotDestroy(&gplot);
pixa = pixaCreate(4);
pix1 = pixRead("/tmp/lept/numa1/histo1.png");
pix2 = pixRead("/tmp/lept/numa1/histo2.png");
pix3 = pixRead("/tmp/lept/numa1/histo3.png");
pix4 = pixRead("/tmp/lept/numa1/histo4.png");
pixaAddPix(pixa, pix1, L_INSERT);
pixaAddPix(pixa, pix2, L_INSERT);
pixaAddPix(pixa, pix3, L_INSERT);
pixaAddPix(pixa, pix4, L_INSERT);
pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2);
pixDisplay(pixd, 600, 0);
pixWrite("/tmp/lept/numa1/histo.png", pixd, IFF_PNG);
pixDestroy(&pixd);
pixaDestroy(&pixa);
numaDestroy(&nax);
numaDestroy(&nahisto);
numaGetStatsUsingHistogram(na, 2000, &minval, &maxval, &meanval,
&variance, &median, 0.80, &rankval, &nahisto);
fprintf(stderr, "Sin histogram: \n"
" min val = %7.2f -- should be -999.00\n"
" max val = %7.2f -- should be 999.00\n"
" mean val = %7.2f -- should be 0.06\n"
" median = %7.2f -- should be 0.30\n"
//.........这里部分代码省略.........
开发者ID:ConfusedReality,项目名称:pkg_images_leptonica,代码行数:101,代码来源:numa1_reg.c
示例5: pixGetWordsInTextlines
//.........这里部分代码省略.........
* The word masks and word images can be computed at either
* 150 ppi or 300 ppi. For the former, set reduction = 2.
* (2) The four size constraints on saved components are all
* scaled by @reduction.
* (3) The result are word images (and their b.b.), extracted in
* textline order, at either full res or 2x reduction,
* and with a numa giving the textline index for each word.
* (4) The pixa and boxa interfaces should make this type of
* application simple to put together. The steps are:
* - optionally reduce by 2x
* - generate first estimate of word masks
* - get b.b. of these, and remove the small and big ones
* - extract pixa of the word images, using the b.b.
* - sort actual word images in textline order (2d)
* - flatten them to a pixa (1d), saving the textline index
* for each pix
* (5) In an actual application, it may be desirable to pre-filter
* the input image to remove large components, to extract
* single columns of text, and to deskew them. For example,
* to remove both large components and small noisy components
* that can interfere with the statistics used to estimate
* parameters for segmenting by words, but still retain text lines,
* the following image preprocessing can be done:
* Pix *pixt = pixMorphSequence(pixs, "c40.1", 0);
* Pix *pixf = pixSelectBySize(pixt, 0, 60, 8,
* L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL);
* pixAnd(pixf, pixf, pixs); // the filtered image
* The closing turns text lines into long blobs, but does not
* significantly increase their height. But if there are many
* small connected components in a dense texture, this is likely
* to generate tall components that will be eliminated in pixf.
*/
l_int32
pixGetWordsInTextlines(PIX *pixs,
l_int32 reduction,
l_int32 minwidth,
l_int32 minheight,
l_int32 maxwidth,
l_int32 maxheight,
BOXA **pboxad,
PIXA **ppixad,
NUMA **pnai)
{
l_int32 maxdil;
BOXA *boxa1, *boxad;
BOXAA *baa;
NUMA *nai;
NUMAA *naa;
PIXA *pixa1, *pixad;
PIX *pix1;
PIXAA *paa;
PROCNAME("pixGetWordsInTextlines");
if (!pboxad || !ppixad || !pnai)
return ERROR_INT("&boxad, &pixad, &nai not all defined", procName, 1);
*pboxad = NULL;
*ppixad = NULL;
*pnai = NULL;
if (!pixs)
return ERROR_INT("pixs not defined", procName, 1);
if (reduction != 1 && reduction != 2)
return ERROR_INT("reduction not in {1,2}", procName, 1);
if (reduction == 1) {
pix1 = pixClone(pixs);
maxdil = 18;
} else { /* reduction == 2 */
pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0);
maxdil = 9;
}
/* Get the bounding boxes of the words from the word mask. */
pixWordBoxesByDilation(pix1, maxdil, minwidth, minheight,
maxwidth, maxheight, &boxa1, NULL);
/* Generate a pixa of the word images */
pixa1 = pixaCreateFromBoxa(pix1, boxa1, NULL); /* mask over each word */
/* Sort the bounding boxes of these words by line. We use the
* index mapping to allow identical sorting of the pixa. */
baa = boxaSort2d(boxa1, &naa, -1, -1, 4);
paa = pixaSort2dByIndex(pixa1, naa, L_CLONE);
/* Flatten the word paa */
pixad = pixaaFlattenToPixa(paa, &nai, L_CLONE);
boxad = pixaGetBoxa(pixad, L_COPY);
*pnai = nai;
*pboxad = boxad;
*ppixad = pixad;
pixDestroy(&pix1);
pixaDestroy(&pixa1);
boxaDestroy(&boxa1);
boxaaDestroy(&baa);
pixaaDestroy(&paa);
numaaDestroy(&naa);
return 0;
}
开发者ID:peterlee2008,项目名称:leptonica,代码行数:101,代码来源:classapp.c
示例6: pixaDisplayTiledAndScaled
/*!
* pixaDisplayTiledAndScaled()
*
* Input: pixa
* outdepth (output depth: 1, 8 or 32 bpp)
* tilewidth (each pix is scaled to this width)
* ncols (number of tiles in each row)
* background (0 for white, 1 for black; this is the color
* of the spacing between the images)
* spacing (between images, and on outside)
* border (width of additional black border on each image;
* use 0 for no border)
* Return: pix of tiled images, or null on error
*
* Notes:
* (1) This can be used to tile a number of renderings of
* an image that are at different scales and depths.
* (2) Each image, after scaling and optionally adding the
* black border, has width 'tilewidth'. Thus, the border does
* not affect the spacing between the image tiles. The
* maximum allowed border width is tilewidth / 5.
*/
PIX *
pixaDisplayTiledAndScaled(PIXA *pixa,
l_int32 outdepth,
l_int32 tilewidth,
l_int32 ncols,
l_int32 background,
l_int32 spacing,
l_int32 border)
{
l_int32 x, y, w, h, wd, hd, d;
l_int32 i, n, nrows, maxht, ninrow, irow, bordval;
l_int32 *rowht;
l_float32 scalefact;
PIX *pix, *pixn, *pixt, *pixb, *pixd;
PIXA *pixan;
PROCNAME("pixaDisplayTiledAndScaled");
if (!pixa)
return (PIX *)ERROR_PTR("pixa not defined", procName, NULL);
if (outdepth != 1 && outdepth != 8 && outdepth != 32)
return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL);
if (border < 0 || border > tilewidth / 5)
border = 0;
if ((n = pixaGetCount(pixa)) == 0)
return (PIX *)ERROR_PTR("no components", procName, NULL);
/* Normalize scale and depth for each pix; optionally add border */
pixan = pixaCreate(n);
bordval = (outdepth == 1) ? 1 : 0;
for (i = 0; i < n; i++) {
if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL)
continue;
pixGetDimensions(pix, &w, &h, &d);
scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w;
if (d == 1 && outdepth > 1 && scalefact < 1.0)
pixt = pixScaleToGray(pix, scalefact);
else
pixt = pixScale(pix, scalefact, scalefact);
if (outdepth == 1)
pixn = pixConvertTo1(pixt, 128);
else if (outdepth == 8)
pixn = pixConvertTo8(pixt, FALSE);
else /* outdepth == 32 */
pixn = pixConvertTo32(pixt);
pixDestroy(&pixt);
if (border)
pixb = pixAddBorder(pixn, border, bordval);
else
pixb = pixClone(pixn);
pixaAddPix(pixan, pixb, L_INSERT);
pixDestroy(&pix);
pixDestroy(&pixn);
}
if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */
pixaDestroy(&pixan);
return (PIX *)ERROR_PTR("no components", procName, NULL);
}
/* Determine the size of each row and of pixd */
wd = tilewidth * ncols + spacing * (ncols + 1);
nrows = (n + ncols - 1) / ncols;
if ((rowht = (l_int32 *)CALLOC(nrows, sizeof(l_int32))) == NULL)
return (PIX *)ERROR_PTR("rowht array not made", procName, NULL);
maxht = 0;
ninrow = 0;
irow = 0;
for (i = 0; i < n; i++) {
pix = pixaGetPix(pixan, i, L_CLONE);
ninrow++;
pixGetDimensions(pix, &w, &h, NULL);
maxht = L_MAX(h, maxht);
if (ninrow == ncols) {
//.........这里部分代码省略.........
开发者ID:ONLYOFFICE,项目名称:core,代码行数:101,代码来源:pixafunc2.cpp
示例7: pixaaDisplayByPixa
/*!
* pixaaDisplayByPixa()
*
* Input: pixaa
* xspace between pix in pixa
* yspace between pixa
* max width of output pix
* Return: pix, or null on error
*
* Notes:
* (1) Displays each pixa on a line (or set of lines),
* in order from top to bottom. Within each pixa,
* the pix are displayed in order from left to right.
* (2) The size of each pix in each pixa is assumed to be
* approximately equal to the size of the first pix in
* the pixa. If this assumption is not correct, this
* function will not work properly.
* (3) This ignores the boxa of the pixaa.
*/
PIX *
pixaaDisplayByPixa(PIXAA *pixaa,
l_int32 xspace,
l_int32 yspace,
l_int32 maxw)
{
l_int32 i, j, npixa, npix;
l_int32 width, height, depth, nlines, lwidth;
l_int32 x, y, w, h, w0, h0;
PIX *pixt, *pixd;
PIXA *pixa;
PROCNAME("pixaaDisplayByPixa");
if (!pixaa)
return (PIX *)ERROR_PTR("pixaa not defined", procName, NULL);
if ((npixa = pixaaGetCount(pixaa)) == 0)
return (PIX *)ERROR_PTR("no components", procName, NULL);
/* Get size of output pix. The width is the minimum of the
* maxw and the largest pixa line width. The height is whatever
* it needs to be to accommodate all pixa. */
height = 2 * yspace;
width = 0;
for (i = 0; i < npixa; i++) {
pixa = pixaaGetPixa(pixaa, i, L_CLONE);
npix = pixaGetCount(pixa);
pixt = pixaGetPix(pixa, 0, L_CLONE);
if (i == 0)
depth = pixGetDepth(pixt);
w = pixGetWidth(pixt);
lwidth = npix * (w + xspace);
nlines = (lwidth + maxw - 1) / maxw;
if (nlines > 1)
width = maxw;
else
width = L_MAX(lwidth, width);
height += nlines * (pixGetHeight(pixt) + yspace);
pixDestroy(&pixt);
pixaDestroy(&pixa);
}
if ((pixd = pixCreate(width, height, depth)) == NULL)
return (PIX *)ERROR_PTR("pixd not made", procName, NULL);
/* Now layout the pix by pixa */
y = yspace;
for (i = 0; i < npixa; i++) {
x = 0;
pixa = pixaaGetPixa(pixaa, i, L_CLONE);
npix = pixaGetCount(pixa);
for (j = 0; j < npix; j++) {
pixt = pixaGetPix(pixa, j, L_CLONE);
if (j == 0) {
w0 = pixGetWidth(pixt);
h0 = pixGetHeight(pixt);
}
w = pixGetWidth(pixt);
if (width == maxw && x + w >= maxw) {
x = 0;
y += h0 + yspace;
}
h = pixGetHeight(pixt);
pixRasterop(pixd, x, y, w, h, PIX_PAINT, pixt, 0, 0);
pixDestroy(&pixt);
x += w0 + xspace;
}
y += h0 + yspace;
pixaDestroy(&pixa);
}
return pixd;
}
开发者ID:ONLYOFFICE,项目名称:core,代码行数:93,代码来源:pixafunc2.cpp
示例8: main
//.........这里部分代码省略.........
boxa1 = boxaRead("boxa2.ba");
boxa2 = boxaReconcileEvenOddHeight(boxa1, L_ADJUST_TOP, 80,
L_ADJUST_CHOOSE_MIN, 1.05, 1);
width = 100;
boxaGetExtent(boxa2, &w, &h, NULL);
scalefact = (l_float32)width / (l_float32)w;
boxa3 = boxaTransform(boxa2, 0, 0, scalefact, scalefact);
pix1 = boxaDisplayTiled(boxa3, NULL, 1500, 2, 1.0, 0, 3, 2);
regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */
pixDisplayWithTitle(pix1, 800, 0, NULL, rp->display);
pixDestroy(&pix1);
boxaDestroy(&boxa1);
boxaDestroy(&boxa2);
boxaDestroy(&boxa3);
/* Input is an unsmoothed and noisy boxa */
boxa1 = boxaRead("boxa2.ba");
boxa2 = boxaSmoothSequenceMedian(boxa1, 10, L_SUB_ON_LOC_DIFF, 80, 20, 1);
boxa3 = boxaSmoothSequenceMedian(boxa1, 10, L_SUB_ON_SIZE_DIFF, 80, 20, 1);
boxaPlotSides(boxa1, "initial", NULL, NULL, NULL, NULL, &pix1);
boxaPlotSides(boxa2, "side_smoothing", NULL, NULL, NULL, NULL, &pix2);
boxaPlotSides(boxa3, "size_smoothing", NULL, NULL, NULL, NULL, &pix3);
regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 14 */
regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 15 */
regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 16 */
pixDisplayWithTitle(pix1, 1300, 0, NULL, rp->display);
pixDisplayWithTitle(pix2, 1300, 500, NULL, rp->display);
pixDisplayWithTitle(pix3, 1300, 1000, NULL, rp->display);
pixDestroy(&pix1);
pixDestroy(&pix2);
pixDestroy(&pix3);
boxaDestroy(&boxa1);
boxaDestroy(&boxa2);
boxaDestroy(&boxa3);
/* Input is a boxa smoothed with a median window filter */
boxa1 = boxaRead("boxa3.ba");
boxa2 = boxaReconcileEvenOddHeight(boxa1, L_ADJUST_TOP, 80,
L_ADJUST_CHOOSE_MIN, 1.05, 1);
width = 100;
boxaGetExtent(boxa2, &w, &h, NULL);
scalefact = (l_float32)width / (l_float32)w;
boxa3 = boxaTransform(boxa2, 0, 0, scalefact, scalefact);
pix1 = boxaDisplayTiled(boxa3, NULL, 1500, 2, 1.0, 0, 3, 2);
regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 17 */
pixDisplayWithTitle(pix1, 1000, 0, NULL, rp->display);
pixDestroy(&pix1);
boxaDestroy(&boxa1);
boxaDestroy(&boxa2);
boxaDestroy(&boxa3);
/* Test serialized boxa I/O to and from memory */
data1 = l_binaryRead("boxa2.ba", &size1);
boxa1 = boxaReadMem(data1, size1);
boxaWriteMem(&data2, &size2, boxa1);
boxa2 = boxaReadMem(data2, size2);
boxaWrite("/tmp/lept/boxa/boxa1.ba", boxa1);
boxaWrite("/tmp/lept/boxa/boxa2.ba", boxa2);
filesAreIdentical("/tmp/lept/boxa/boxa1.ba", "/tmp/lept/boxa/boxa2.ba",
&same);
regTestCompareValues(rp, 1, same, 0.0); /* 18 */
boxaDestroy(&boxa1);
boxaDestroy(&boxa2);
lept_free(data1);
lept_free(data2);
/* ----------- Test pixaDisplayBoxaa() ------------ */
pixa1 = pixaReadBoth("showboxes.pac");
baa1 = boxaaRead("showboxes1.baa");
baa2 = boxaaTranspose(baa1);
baa3 = boxaaTranspose(baa2);
nba = boxaaGetCount(baa1);
success = TRUE;
for (i = 0; i < nba; i++) {
boxa1 = boxaaGetBoxa(baa1, i, L_CLONE);
boxa2 = boxaaGetBoxa(baa3, i, L_CLONE);
boxaEqual(boxa1, boxa2, 0, NULL, &same);
boxaDestroy(&boxa1);
boxaDestroy(&boxa2);
if (!same) success = FALSE;
}
/* Check that the transpose is reversible */
regTestCompareValues(rp, 1, success, 0.0); /* 19 */
pixa2 = pixaDisplayBoxaa(pixa1, baa2, L_DRAW_RGB, 2);
pix1 = pixaDisplayTiledInRows(pixa2, 32, 1400, 1.0, 0, 10, 0);
regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 20 */
pixDisplayWithTitle(pix1, 0, 600, NULL, rp->display);
fprintf(stderr, "Writing to: /tmp/lept/boxa/show.pdf\n");
l_pdfSetDateAndVersion(FALSE);
pixaConvertToPdf(pixa2, 75, 1.0, 0, 0, NULL, "/tmp/lept/boxa/show.pdf");
regTestCheckFile(rp, "/tmp/lept/boxa/show.pdf"); /* 21 */
pixDestroy(&pix1);
pixaDestroy(&pixa1);
pixaDestroy(&pixa2);
boxaaDestroy(&baa1);
boxaaDestroy(&baa2);
boxaaDestroy(&baa3);
return regTestCleanup(rp);
}
开发者ID:renard314,项目名称:tess-two,代码行数:101,代码来源:boxa1_reg.c
示例9: main
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, "fonts");
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;
}
开发者ID:11110101,项目名称:tess-two,代码行数:77,代码来源:recogsort.c
示例10: main
int main(int argc,
char **argv) {
char textstr[256];
l_int32 i, thresh, fgval, bgval;
l_float32 scorefract;
L_BMF *bmf;
PIX *pixs, *pixb, *pixb2, *pixb3, *pixg, *pixp, *pixt1, *pixt2;
PIXA *pixa;
pixs = pixRead("1555-7.jpg");
pixg = pixConvertTo8(pixs, 0);
bmf = bmfCreate("fonts", 8);
for (i = 0; i < 3; i++) {
pixa = pixaCreate(3);
scorefract = 0.1 * i;
pixOtsuAdaptiveThreshold(pixg, 2000, 2000, 0, 0, scorefract,
NULL, &pixb);
pixSaveTiledOutline(pixb, pixa, 0.5, 1, 20, 2, 32);
pixSplitDistributionFgBg(pixg, scorefract, 1, &thresh, &fgval, &bgval, 1);
fprintf(stderr, "thresh = %d, fgval = %d, bgval = %d\n", thresh, fgval,
bgval);
/* Give gnuplot time to write out the plot */
#ifndef _WIN32
sleep(1);
#else
Sleep(1000);
#endif /* _WIN32 */
pixp = pixRead("/tmp/histplot.png");
pixSaveTiled(pixp, pixa, 1.0, 0, 20, 1);
pixt1 = pixaDisplay(pixa, 0, 0);
snprintf(textstr, sizeof(textstr),
"Scorefract = %3.1f ........... Thresh = %d", scorefract, thresh);
pixt2 = pixAddSingleTextblock(pixt1, bmf, textstr, 0x00ff0000,
L_ADD_BELOW, NULL);
pixDisplay(pixt2, 100, 100);
snprintf(textstr, sizeof(textstr), "/tmp/otsu.%d.png", i);
pixWrite(textstr, pixt2, IFF_PNG);
pixDestroy(&pixb);
pixDestroy(&pixp);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixaDestroy(&pixa);
}
pixa = pixaCreate(2);
for (i = 0; i < 2; i++) {
scorefract = 0.1 * i;
pixOtsuAdaptiveThreshold(pixg, 300, 300, 0, 0, scorefract,
NULL, &pixb);
pixb2 = pixAddBlackOrWhiteBorder(pixb, 2, 2, 2, 2, L_GET_BLACK_VAL);
snprintf(textstr, sizeof(textstr),
"Scorefract = %3.1f", scorefract);
pixb3 = pixAddSingleTextblock(pixb2, bmf, textstr, 1,
L_ADD_BELOW, NULL);
pixSaveTiled(pixb3, pixa, 2, (i + 1) % 1, 20, 32);
pixDestroy(&pixb);
pixDestroy(&pixb2);
}
pixb = pixaDisplay(pixa, 0, 0);
pixWrite("/tmp/otsu-tiled.jpg", pixb, IFF_PNG);
pixDestroy(&pixb);
pixaDestroy(&pixa);
bmfDestroy(&bmf);
pixDestroy(&pixs);
pixDestroy(&pixg);
return 0;
}
开发者ID:mehulsbhatt,项目名称:MyOCRTEST,代码行数:70,代码来源:otsutest2.c
示例11: shearTest
//.........这里部分代码省略.........
pixGetDimensions(pixs, &w, &h, &d);
pixt1 = pixHShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt1, pixa, reduction, 1, 20, 32);
pixt2 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixHShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt1, pixa, reduction, 0, 20, 0);
pixt2 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
if (!pixGetColormap(pixs)) {
pixt1 = pixCopy(NULL, pixs);
pixHShearIP(pixt1, 0, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt1, pixa, reduction, 1, 20, 0);
pixt2 = pixCopy(NULL, pixs);
pixHShearIP(pixt2, h / 2, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixCopy(NULL, pixs);
pixHShearIP(pixt1, 0, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt1, pixa, reduction, 0, 20, 0);
pixt2 = pixCopy(NULL, pixs);
pixHShearIP(pixt2, h / 2, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 32);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
}
if (d == 8 || d == 32 || pixGetColormap(pixs)) {
pixt1 = pixHShearLI(pixs, 0, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt1, pixa, reduction, 1, 20, 0);
pixt2 = pixHShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixHShearLI(pixs, 0, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt1, pixa, reduction, 0, 20, 0);
pixt2 = pixHShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
}
pixt1 = pixVShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt1, pixa, reduction, 1, 20, 0);
pixt2 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixVShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt1, pixa, reduction, 0, 20, 0);
pixt2 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
if (!pixGetColormap(pixs)) {
pixt1 = pixCopy(NULL, pixs);
pixVShearIP(pixt1, 0, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt1, pixa, reduction, 1, 20, 0);
pixt2 = pixCopy(NULL, pixs);
pixVShearIP(pixt2, w / 2, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixCopy(NULL, pixs);
pixVShearIP(pixt1, 0, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt1, pixa, reduction, 0, 20, 0);
pixt2 = pixCopy(NULL, pixs);
pixVShearIP(pixt2, w / 2, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 32);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
}
if (d == 8 || d == 32 || pixGetColormap(pixs)) {
pixt1 = pixVShearLI(pixs, 0, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt1, pixa, reduction, 1, 20, 0);
pixt2 = pixVShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_WHITE);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixVShearLI(pixs, 0, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt1, pixa, reduction, 0, 20, 0);
pixt2 = pixVShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_BLACK);
pixSaveTiled(pixt2, pixa, reduction, 0, 20, 0);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
}
pixd = pixaDisplay(pixa, 0, 0);
pixaDestroy(&pixa);
return pixd;
}
开发者ID:0xkasun,项目名称:Dummy_Tes,代码行数:101,代码来源:shear_reg.c
示例12: main
int main(int argc,
char **argv) {
const char *name;
l_int32 i, n;
BOX *box;
PIX *pix0, *pix1, *pixd;
PIXA *pixa;
SARRAY *sa1, *sa2, *sa3, *sa4;
L_REGPARAMS *rp;
if (regTestSetup(argc, argv, &rp))
return 1;
/* ---------------- Find all the jpg and tif images --------------- */
sa1 = getSortedPathnamesInDirectory(".", ".jpg", 0, 0);
sa2 = getSortedPathnamesInDirectory(".", ".tif", 0, 0);
sa3 = sarraySelectByRange(sa1, 0, 9);
sa4 = sarraySelectByRange(sa2, 0, 9);
sarrayConcatenate(sa3, sa4);
n = sarrayGetCount(sa3);
sarrayDestroy(&sa1);
sarrayDestroy(&sa2);
sarrayDestroy(&sa4);
/* ---------------- Use replace to fill up a pixa -------------------*/
pixa = pixaCreate(1);
pixaExtendArrayToSize(pixa, n);
if ((pix0 = pixRead("marge.jpg")) == NULL)
rp->success = FALSE;
pix1 = pixScaleToSize(pix0, 144, 108); /* scale 0.25 */
pixDestroy(&pix0);
pixaInitFull(pixa, pix1, NULL); /* fill it up */
pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2);
pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display);
pixWrite("/tmp/regout/pix1.jpg", pixd, IFF_JFIF_JPEG);
pixDestroy(&pix1);
pixDestroy(&pixd);
/* ---------------- And again with jpgs and tifs -------------------*/
for (i = 0; i < n; i++) {
name = sarrayGetString(sa3, i, L_NOCOPY);
if ((pix0 = pixRead(name)) == NULL)
rp->success = FALSE;
pix1 = pixScaleToSize(pix0, 144, 108);
pixaReplacePix(pixa, i, pix1, NULL);
pixDestroy(&pix0);
}
pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2);
pixDisplayWithTitle(pixd, 400, 100, NULL, rp->display);
pixWrite("/tmp/regout/pix2.jpg", pixd, IFF_JFIF_JPEG);
pixDestroy(&pixd);
/* ---------------- And again, reversing the order ------------------*/
box = boxCreate(0, 0, 0, 0);
pixaInitFull(pixa, NULL, box);
boxDestroy(&box);
for (i = 0; i < n; i++) {
name = sarrayGetString(sa3, i, L_NOCOPY);
if ((pix0 = pixRead(name)) == NULL)
rp->success = FALSE;
pix1 = pixScaleToSize(pix0, 144, 108);
pixaReplacePix(pixa, n - 1 - i, pix1, NULL);
pixDestroy(&pix0);
}
pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2);
pixDisplayWithTitle(pixd, 700, 100, NULL, rp->display);
pixWrite("/tmp/regout/pix3.jpg", pixd, IFF_JFIF_JPEG);
pixDestroy(&pixd);
sarrayDestroy(&sa3);
pixaDestroy(&pixa);
return regTestCleanup(rp);
}
开发者ID:mehulsbhatt,项目名称:MyOCRTEST,代码行数:73,代码来源:pixa2_reg.c
示例13: main
//.........这里部分代码省略.........
lept_mkdir("lept/binding");
pixa = pixaCreate(0);
pix1 = pixRead("binding-example.45.jpg");
pix2 = pixConvertTo8(pix1, 0);
/* Find the skew angle */
pix3 = pixConvertTo1(pix2, 150);
pixFindSkewSweepAndSearch(pix3, &angle, &conf, 2, 2, 7.0, 1.0, 0.01);
fprintf(stderr, "angle = %f, conf = %f\n", angle, conf);
/* Deskew, bringing in black pixels at the edges */
if (L_ABS(angle) < 0.1 || conf < 1.5) {
pix4 = pixClone(pix2);
} else {
radangle = 3.1416 * angle / 180.0;
pix4 = pixRotate(pix2, radangle, L_ROTATE_AREA_MAP,
L_BRING_IN_BLACK, 0, 0);
}
/* Rotate 90 degrees to make binding horizontal */
pix5 = pixRotateOrth(pix4, 1);
/* Sort pixels in each row by their gray value.
* Dark pixels on the left, light ones on the right. */
pix6 = pixRankRowTransform(pix5);
pixDisplay(pix5, 0, 0);
pixDisplay(pix6, 550, 0);
pixaAddPix(pixa, pix4, L_COPY);
pixaAddPix(pixa, pix5, L_COPY);
pixaAddPix(pixa, pix6, L_COPY);
/* Make an a priori estimate of the y-interval within which the
* binding will be found. The search will be done in this interval. */
pixGetDimensions(pix6, &w, &h, NULL);
ystart = 0.25 * h;
yend = 0.75 * h;
/* Choose a very light rank value; close to white, which
* corresponds to a column in pix6 near the right sid
|
请发表评论