251 #include "config_auto.h" 255 #include "allheaders.h" 257 static const l_int32 INITIAL_PTR_ARRAYSIZE = 20;
261 static const l_int32 NMAX_HOLES = 150;
276 static const l_int32 xpostab[] = {-1, -1, 0, 1, 1, 1, 0, -1};
277 static const l_int32 ypostab[] = {0, -1, -1, -1, 0, 1, 1, 1};
278 static const l_int32 qpostab[] = {6, 6, 0, 0, 2, 2, 4, 4};
283 #ifndef NO_CONSOLE_IO 284 #define DEBUG_PRINT 0 304 PROCNAME(
"ccbaCreate");
307 n = INITIAL_PTR_ARRAYSIZE;
312 ccba->
w = pixGetWidth(pixs);
313 ccba->
h = pixGetHeight(pixs);
317 if ((ccba->
ccb = (
CCBORD **)LEPT_CALLOC(n,
sizeof(
CCBORD *))) == NULL) {
319 return (
CCBORDA *)ERROR_PTR(
"ccba ptrs not made", procName, NULL);
337 PROCNAME(
"ccbaDestroy");
340 L_WARNING(
"ptr address is NULL!\n", procName);
344 if ((ccba = *pccba) == NULL)
348 for (i = 0; i < ccba->
n; i++)
350 LEPT_FREE(ccba->
ccb);
371 PROCNAME(
"ccbCreate");
374 if (pixGetDepth(pixs) != 1)
375 return (
CCBORD *)ERROR_PTR(
"pixs not binary", procName, NULL);
378 if ((ccb = (
CCBORD *)LEPT_CALLOC(1,
sizeof(
CCBORD))) == NULL)
379 return (
CCBORD *)ERROR_PTR(
"ccb not made", procName, NULL);
384 return (
CCBORD *)ERROR_PTR(
"boxa not made", procName, NULL);
387 return (
CCBORD *)ERROR_PTR(
"start pta not made", procName, NULL);
390 return (
CCBORD *)ERROR_PTR(
"local ptaa not made", procName, NULL);
408 PROCNAME(
"ccbDestroy");
411 L_WARNING(
"ptr address is NULL!\n", procName);
415 if ((ccb = *pccb) == NULL)
459 PROCNAME(
"ccbaAddCcb");
462 return ERROR_INT(
"ccba not defined", procName, 1);
464 return ERROR_INT(
"ccb not defined", procName, 1);
484 PROCNAME(
"ccbaExtendArray");
487 return ERROR_INT(
"ccba not defined", procName, 1);
492 return ERROR_INT(
"new ptr array not returned", procName, 1);
513 PROCNAME(
"ccbaGetCount");
516 return ERROR_INT(
"ccba not defined", procName, 0);
538 PROCNAME(
"ccbaGetCcb");
541 return (
CCBORD *)ERROR_PTR(
"ccba not defined", procName, NULL);
542 if (index < 0 || index >= ccba->
n)
543 return (
CCBORD *)ERROR_PTR(
"index out of bounds", procName, NULL);
545 ccb = ccba->
ccb[index];
562 pixGetAllCCBorders(
PIX *pixs)
572 PROCNAME(
"pixGetAllCCBorders");
575 return (
CCBORDA *)ERROR_PTR(
"pixs not defined", procName, NULL);
576 if (pixGetDepth(pixs) != 1)
577 return (
CCBORDA *)ERROR_PTR(
"pixs not binary", procName, NULL);
580 return (
CCBORDA *)ERROR_PTR(
"boxa not made", procName, NULL);
586 return (
CCBORDA *)ERROR_PTR(
"ccba not made", procName, NULL);
588 for (i = 0; i < n; i++) {
593 return (
CCBORDA *)ERROR_PTR(
"pix not found", procName, NULL);
600 return (
CCBORDA *)ERROR_PTR(
"box not found", procName, NULL);
609 return (
CCBORDA *)ERROR_PTR(
"ccb not made", procName, NULL);
651 l_int32 allzero, i, x, xh, w, nh;
661 PROCNAME(
"pixGetCCBorders");
664 return (
CCBORD *)ERROR_PTR(
"pixs not defined", procName, NULL);
666 return (
CCBORD *)ERROR_PTR(
"box not defined", procName, NULL);
667 if (pixGetDepth(pixs) != 1)
668 return (
CCBORD *)ERROR_PTR(
"pixs not binary", procName, NULL);
672 return (
CCBORD *)ERROR_PTR(
"pixs all 0", procName, NULL);
675 return (
CCBORD *)ERROR_PTR(
"ccb not made", procName, NULL);
683 return (
CCBORD *)ERROR_PTR(
"pixh not made", procName, NULL);
692 if ((boxa =
pixConnComp(pixh, &pixa, 4)) == NULL) {
695 return (
CCBORD *)ERROR_PTR(
"boxa not made", procName, NULL);
710 w = pixGetWidth(pixs);
711 for (i = 0; i < nh; i++) {
715 for (x = 0; x < boxt->
w; x++) {
723 L_WARNING(
"no hole pixel found!\n", procName);
726 for (x = xh + boxt->
x; x < w; x++) {
733 boxe =
boxCreate(boxt->
x - 1, boxt->
y - 1, boxt->
w + 2, boxt->
h + 2);
737 fprintf(stderr,
"xs = %d, ys = %d\n", xs, ys);
769 PROCNAME(
"pixGetOuterBordersPtaa");
772 return (
PTAA *)ERROR_PTR(
"pixs not defined", procName, NULL);
773 if (pixGetDepth(pixs) != 1)
774 return (
PTAA *)ERROR_PTR(
"pixs not binary", procName, NULL);
781 return (
PTAA *)ERROR_PTR(
"pixs empty", procName, NULL);
785 for (i = 0; i < n; i++) {
822 l_int32 allzero, x, y;
827 PROCNAME(
"pixGetOuterBorderPta");
830 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
831 if (pixGetDepth(pixs) != 1)
832 return (
PTA *)ERROR_PTR(
"pixs not binary", procName, NULL);
836 return (
PTA *)ERROR_PTR(
"pixs all 0", procName, NULL);
839 return (
PTA *)ERROR_PTR(
"ccb not made", procName, NULL);
841 boxt =
boxCreate(0, 0, pixGetWidth(pixs), pixGetHeight(pixs));
850 return (
PTA *)ERROR_PTR(
"ptaloc not made", procName, NULL);
896 l_int32 fpx, fpy, spx, spy, qpos;
897 l_int32 px, py, npx, npy;
903 PROCNAME(
"pixGetOuterBorder");
906 return ERROR_INT(
"ccb not defined", procName, 1);
908 return ERROR_INT(
"pixs not defined", procName, 1);
910 return ERROR_INT(
"box not defined", procName, 1);
914 return ERROR_INT(
"pixs not made", procName, 1);
917 return ERROR_INT(
"no start pixel found", procName, 1);
932 wpl = pixGetWpl(pixb);
948 if (px == fpx && py == fpy && npx == spx && npy == spy)
986 l_int32 fpx, fpy, spx, spy, qpos;
987 l_int32 px, py, npx, npy;
992 PROCNAME(
"pixGetHoleBorder");
995 return ERROR_INT(
"ccb not defined", procName, 1);
997 return ERROR_INT(
"pixs not defined", procName, 1);
999 return ERROR_INT(
"box not defined", procName, 1);
1011 return ERROR_INT(
"pta not made", procName, 1);
1015 w = pixGetWidth(pixs);
1016 h = pixGetHeight(pixs);
1018 wpl = pixGetWpl(pixs);
1023 return ERROR_INT(
"isolated hole border point!", procName, 1);
1033 if (px == fpx && py == fpy && npx == spx && npy == spy)
1072 l_int32 qpos, i, pos, npx, npy, val;
1076 for (i = 1; i < 8; i++) {
1077 pos = (qpos + i) % 8;
1078 npx = px + xpostab[pos];
1079 npy = py + ypostab[pos];
1080 line = data + npy * wpl;
1085 *pqpos = qpostab[pos];
1128 }
else if (dx * dy == -1) {
1131 }
else if (dx == 0) {
1160 l_int32 ncc, nb, n, i, j, k, xul, yul, x, y;
1162 PTAA *ptaal, *ptaag;
1165 PROCNAME(
"ccbaGenerateGlobalLocs");
1168 return ERROR_INT(
"ccba not defined", procName, 1);
1171 for (i = 0; i < ncc; i++) {
1172 ccb = ccbaGetCcb(ccba, i);
1183 return ERROR_INT(
"ptaag not made", procName, 1);
1187 for (j = 0; j < nb; j++) {
1191 return ERROR_INT(
"ptag not made", procName, 1);
1193 for (k = 0; k < n; k++) {
1231 l_int32 ncc, nb, n, i, j, k;
1232 l_int32 px, py, cx, cy, stepdir;
1233 l_int32 dirtab[][3] = {{1, 2, 3}, {0, -1, 4}, {7, 6, 5}};
1240 PROCNAME(
"ccbaGenerateStepChains");
1243 return ERROR_INT(
"ccba not defined", procName, 1);
1246 for (i = 0; i < ncc; i++) {
1247 ccb = ccbaGetCcb(ccba, i);
1255 return ERROR_INT(
"naa not made", procName, 1);
1259 for (j = 0; j < nb; j++) {
1266 return ERROR_INT(
"na not made", procName, 1);
1268 for (k = 1; k < n; k++) {
1270 stepdir = dirtab[1 + cy - py][1 + cx - px];
1306 l_int32 ncc, nb, n, i, j, k;
1307 l_int32 xul, yul, xstart, ystart, x, y, stepdir;
1315 PROCNAME(
"ccbaStepChainsToPixCoords");
1318 return ERROR_INT(
"ccba not defined", procName, 1);
1319 if (coordtype != CCB_GLOBAL_COORDS && coordtype != CCB_LOCAL_COORDS)
1320 return ERROR_INT(
"coordtype not valid", procName, 1);
1323 for (i = 0; i < ncc; i++) {
1324 ccb = ccbaGetCcb(ccba, i);
1325 if ((naa = ccb->
step) == NULL)
1326 return ERROR_INT(
"step numaa not found", procName, 1);
1327 if ((boxa = ccb->
boxa) == NULL)
1328 return ERROR_INT(
"boxa not found", procName, 1);
1329 if ((ptas = ccb->
start) == NULL)
1330 return ERROR_INT(
"start pta not found", procName, 1);
1334 if (coordtype == CCB_LOCAL_COORDS) {
1340 return ERROR_INT(
"bounding rectangle not found", procName, 1);
1346 return ERROR_INT(
"ptaan not made", procName, 1);
1347 if (coordtype == CCB_LOCAL_COORDS) {
1358 for (j = 0; j < nb; j++) {
1362 return ERROR_INT(
"ptan not made", procName, 1);
1368 for (k = 0; k < n; k++) {
1370 x += xpostab[stepdir];
1371 y += ypostab[stepdir];
1406 l_int32 ncc, npt, i, j, xul, yul, x, y, delx, dely;
1407 l_int32 xp, yp, delxp, delyp;
1411 PROCNAME(
"ccbaGenerateSPGlobalLocs");
1414 return ERROR_INT(
"ccba not defined", procName, 1);
1417 if ((ccb = ccbaGetCcb(ccba, 0)) == NULL)
1418 return ERROR_INT(
"no ccb", procName, 1);
1424 for (i = 0; i < ncc; i++) {
1425 ccb = ccbaGetCcb(ccba, i);
1429 return ERROR_INT(
"bounding rectangle not found", procName, 1);
1437 return ERROR_INT(
"ptag not made", procName, 1);
1441 if (ptsflag == CCB_SAVE_ALL_PTS) {
1442 for (j = 0; j < npt; j++) {
1448 ptaAddPt(ptag, xp + xul, yp + yul);
1452 }
else if (npt > 2) {
1458 for (j = 2; j < npt; j++) {
1462 if (delx != delxp || dely != delyp)
1463 ptaAddPt(ptag, xp + xul, yp + yul);
1469 ptaAddPt(ptag, xp + xul, yp + yul);
1522 l_int32 i, j, k, ncc, nb, ncut, npt, dir, len, state, lostholes;
1523 l_int32 x, y, xl, yl, xf, yf;
1527 PTA *pta, *ptac, *ptah;
1536 PROCNAME(
"ccbaGenerateSinglePath");
1539 return ERROR_INT(
"ccba not defined", procName, 1);
1543 for (i = 0; i < ncc; i++) {
1544 ccb = ccbaGetCcb(ccba, i);
1545 if ((ptaa = ccb->
local) == NULL) {
1546 L_WARNING(
"local pixel loc array not found\n", procName);
1559 if (nb == 1 || nb > NMAX_HOLES + 1) {
1572 for (j = 1; j < nb; j++) {
1603 for (k = 0; k < npt; k++) {
1610 state = L_NOT_FOUND;
1611 for (j = 0; j < nb - 1; j++) {
1613 if (x == xl && y == yl) {
1633 if (state == L_NOT_FOUND)
1646 L_WARNING(
"***** %d lost holes *****\n", procName, lostholes);
1684 l_int32 w, h, nc, x, y, xl, yl, xmid, ymid;
1688 PROCNAME(
"getCutPathForHole");
1691 return (
PTA *)ERROR_PTR(
"pix not defined", procName, NULL);
1693 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
1695 return (
PTA *)ERROR_PTR(
"boxinner not defined", procName, NULL);
1697 w = pixGetWidth(pix);
1698 h = pixGetHeight(pix);
1701 return (
PTA *)ERROR_PTR(
"ptac not made", procName, NULL);
1702 xmid = boxinner->
x + boxinner->
w / 2;
1703 ymid = boxinner->
y + boxinner->
h / 2;
1706 for (y = ymid; y >= 0; y--) {
1713 for (y = y - 1; y >= 0; y--) {
1730 for (y = ymid; y < h; y++) {
1737 for (y = y + 1; y < h; y++) {
1754 for (x = xmid; x >= 0; x--) {
1761 for (x = x - 1; x >= 0; x--) {
1778 for (x = xmid; x < w; x++) {
1785 for (x = x + 1; x < w; x++) {
1802 L_WARNING(
"no path found\n", procName);
1828 l_int32 ncc, nb, n, i, j, k, x, y;
1834 PROCNAME(
"ccbaDisplayBorder");
1837 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1839 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1840 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1842 for (i = 0; i < ncc; i++) {
1843 ccb = ccbaGetCcb(ccba, i);
1844 if ((ptaa = ccb->
global) == NULL) {
1845 L_WARNING(
"global pixel loc array not found", procName);
1849 for (j = 0; j < nb; j++) {
1852 for (k = 0; k < n; k++) {
1881 l_int32 ncc, npt, i, j, x, y;
1886 PROCNAME(
"ccbaDisplaySPBorder");
1889 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1891 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1892 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1894 for (i = 0; i < ncc; i++) {
1895 ccb = ccbaGetCcb(ccba, i);
1896 if ((ptag = ccb->
spglobal) == NULL) {
1897 L_WARNING(
"spglobal pixel loc array not found\n", procName);
1901 for (j = 0; j < npt; j++) {
1971 l_int32 ncc, i, nb, n, j, k, x, y, xul, yul, xoff, yoff, w, h;
1972 l_int32 fpx, fpy, spx, spy, xs, ys;
1976 PIX *pixd, *pixt, *pixh;
1980 PROCNAME(
"ccbaDisplayImage1");
1983 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1985 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1986 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1988 for (i = 0; i < ncc; i++) {
1989 ccb = ccbaGetCcb(ccba, i);
1990 if ((boxa = ccb->
boxa) == NULL) {
1992 return (
PIX *)ERROR_PTR(
"boxa not found", procName, NULL);
1996 if ((ptaa = ccb->
local) == NULL) {
1997 L_WARNING(
"local chain array not found\n", procName);
2002 for (j = 0; j < nb; j++) {
2005 return (
PIX *)ERROR_PTR(
"b. box not found", procName, NULL);
2019 if ((pixt =
pixCreate(w, h, 1)) == NULL) {
2021 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
2025 for (k = 0; k < n; k++) {
2046 return (
PIX *)ERROR_PTR(
"pixh not made", procName, NULL);
2097 l_int32 ncc, nb, n, i, j, k, x, y, xul, yul, w, h;
2098 l_int32 fpx, fpy, spx, spy, xs, ys;
2101 PIX *pixd, *pixc, *pixs;
2105 PROCNAME(
"ccbaDisplayImage2");
2108 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
2110 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
2111 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2113 for (i = 0; i < ncc; i++) {
2116 ccb = ccbaGetCcb(ccba, i);
2117 if ((boxa = ccb->
boxa) == NULL) {
2120 return (
PIX *)ERROR_PTR(
"boxa not found", procName, NULL);
2125 return (
PIX *)ERROR_PTR(
"b. box not found", procName, NULL);
2130 if ((ptaa = ccb->
local) == NULL) {
2134 L_WARNING(
"local chain array not found\n", procName);
2138 for (j = 0; j < nb; j++) {
2143 for (k = 0; k < n; k++) {
2149 }
else if (k == 1) {
2198 PROCNAME(
"ccbaWrite");
2201 return ERROR_INT(
"filename not defined", procName, 1);
2203 return ERROR_INT(
"ccba not defined", procName, 1);
2206 return ERROR_INT(
"stream not opened", procName, 1);
2209 return ERROR_INT(
"ccba not written to stream", procName, 1);
2250 l_uint8 *datain, *dataout;
2251 l_int32 i, j, k, bx, by, bw, bh, val, startx, starty;
2254 size_t inbytes, outbytes;
2261 PROCNAME(
"ccbaWriteStream");
2264 return ERROR_INT(
"no libz: can't write data", procName, 1);
2268 return ERROR_INT(
"stream not open", procName, 1);
2270 return ERROR_INT(
"ccba not defined", procName, 1);
2273 return ERROR_INT(
"bbuf not made", procName, 1);
2276 snprintf(strbuf,
sizeof(strbuf),
"ccba: %7d cc\n", ncc);
2278 w = pixGetWidth(ccba->
pix);
2279 h = pixGetHeight(ccba->
pix);
2282 for (i = 0; i < ncc; i++) {
2283 ccb = ccbaGetCcb(ccba, i);
2286 return ERROR_INT(
"bounding box not found", procName, 1);
2292 if ((naa = ccb->
step) == NULL) {
2299 for (j = 0; j < nb; j++) {
2305 for (k = 0; k < n; k++) {
2308 bval = (l_uint8)val << 4;
2310 bval |= (l_uint8)val;
2329 fwrite(dataout, 1, outbytes, fp);
2351 PROCNAME(
"ccbaRead");
2354 return (
CCBORDA *)ERROR_PTR(
"filename not defined", procName, NULL);
2357 return (
CCBORDA *)ERROR_PTR(
"stream not opened", procName, NULL);
2362 return (
CCBORDA *)ERROR_PTR(
"ccba not returned", procName, NULL);
2396 l_uint8 *datain, *dataout;
2397 l_int32 i, j, startx, starty;
2398 l_int32 offset, nib1, nib2;
2400 l_uint32 width, height, w, h, xoff, yoff;
2401 size_t inbytes, outbytes;
2408 PROCNAME(
"ccbaReadStream");
2411 return (
CCBORDA *)ERROR_PTR(
"no libz: can't read data", procName, NULL);
2415 return (
CCBORDA *)ERROR_PTR(
"stream not open", procName, NULL);
2418 return (
CCBORDA *)ERROR_PTR(
"data not read from file", procName, NULL);
2422 return (
CCBORDA *)ERROR_PTR(
"dataout not made", procName, NULL);
2425 memcpy((
void *)strbuf, (
void *)dataout, offset);
2427 if (strncmp(strbuf,
"ccba:", 5) != 0) {
2429 return (
CCBORDA *)ERROR_PTR(
"file not type ccba", procName, NULL);
2431 sscanf(strbuf,
"ccba: %7d cc\n", &ncc);
2433 if ((ccba =
ccbaCreate(NULL, ncc)) == NULL) {
2435 return (
CCBORDA *)ERROR_PTR(
"ccba not made", procName, NULL);
2438 memcpy((
void *)&width, (
void *)(dataout + offset), 4);
2440 memcpy((
void *)&height, (
void *)(dataout + offset), 4);
2446 for (i = 0; i < ncc; i++) {
2450 memcpy((
void *)&xoff, (
void *)(dataout + offset), 4);
2452 memcpy((
void *)&yoff, (
void *)(dataout + offset), 4);
2454 memcpy((
void *)&w, (
void *)(dataout + offset), 4);
2456 memcpy((
void *)&h, (
void *)(dataout + offset), 4);
2463 memcpy((
void *)&nb, (
void *)(dataout + offset), 4);
2469 for (j = 0; j < nb; j++) {
2470 memcpy((
void *)&startx, (
void *)(dataout + offset), 4);
2472 memcpy((
void *)&starty, (
void *)(dataout + offset), 4);
2480 bval = *(dataout + offset);
2518 PROCNAME(
"ccbaWriteSVG");
2521 return ERROR_INT(
"filename not defined", procName, 1);
2523 return ERROR_INT(
"ccba not defined", procName, 1);
2526 return ERROR_INT(
"svgstr not made", procName, 1);
2549 char line0[] =
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
2550 char line1[] =
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000303 Stylable//EN\" \"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd\">";
2551 char line2[] =
"<svg>";
2552 char line3[] =
"<polygon style=\"stroke-width:1;stroke:black;\" points=\"";
2553 char line4[] =
"\" />";
2554 char line5[] =
"</svg>";
2556 l_int32 i, j, ncc, npt, x, y;
2561 PROCNAME(
"ccbaWriteSVGString");
2564 return (
char *)ERROR_PTR(
"filename not defined", procName, NULL);
2566 return (
char *)ERROR_PTR(
"ccba not defined", procName, NULL);
2573 for (i = 0; i < ncc; i++) {
2574 if ((ccb = ccbaGetCcb(ccba, i)) == NULL) {
2576 return (
char *)ERROR_PTR(
"ccb not found", procName, NULL);
2578 if ((pta = ccb->
spglobal) == NULL) {
2581 return (
char *)ERROR_PTR(
"spglobal not made", procName, NULL);
2585 for (j = 0; j < npt; j++) {
2587 snprintf(smallbuf,
sizeof(smallbuf),
"%0d,%0d", x, y);
l_int32 ccbaGetCount(CCBORDA *ccba)
ccbaGetCount()
l_int32 ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
l_uint8 * zlibCompress(l_uint8 *datain, size_t nin, size_t *pnout)
zlibCompress()
char * sarrayToString(SARRAY *sa, l_int32 addnlflag)
sarrayToString()
PIX * pixHolesByFilling(PIX *pixs, l_int32 connectivity)
pixHolesByFilling()
l_int32 ccbaWrite(const char *filename, CCBORDA *ccba)
ccbaWrite()
l_int32 pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys)
pixGetHoleBorder()
l_int32 ccbaWriteSVG(const char *filename, CCBORDA *ccba)
ccbaWriteSVG()
l_int32 numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
CCBORDA * ccbaCreate(PIX *pixs, l_int32 n)
ccbaCreate()
PIX * ccbaDisplaySPBorder(CCBORDA *ccba)
ccbaDisplaySPBorder()
CCBORD * ccbCreate(PIX *pixs)
ccbCreate()
l_int32 ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_int32 pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
void ccbaDestroy(CCBORDA **pccba)
ccbaDestroy()
l_int32 nextOnPixelInRaster(PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py)
nextOnPixelInRaster()
l_int32 pixZero(PIX *pix, l_int32 *pempty)
pixZero()
PIX * ccbaDisplayImage1(CCBORDA *ccba)
ccbaDisplayImage1()
CCBORD * pixGetCCBorders(PIX *pixs, BOX *box)
ccbaGetCcb()
PIX * ccbaDisplayBorder(CCBORDA *ccba)
ccbaDisplayBorder()
PTA * ptaCreate(l_int32 n)
ptaCreate()
CCBORDA * ccbaRead(const char *filename)
ccbaRead()
l_int32 ccbaAddCcb(CCBORDA *ccba, CCBORD *ccb)
ccbaAddCcb()
l_int32 ccbaGenerateStepChains(CCBORDA *ccba)
ccbaGenerateStepChains()
CCBORDA * ccbaReadStream(FILE *fp)
ccbaReadStream()
l_int32 pixGetOuterBorder(CCBORD *ccb, PIX *pixs, BOX *box)
pixGetOuterBorder()
l_int32 boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
l_int32 ccbaWriteStream(FILE *fp, CCBORDA *ccba)
ccbaWriteStream()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetBox()
l_int32 ccbaGenerateSinglePath(CCBORDA *ccba)
ccbaGenerateSinglePath()
l_int32 boxPrintStreamInfo(FILE *fp, BOX *box)
boxPrintStreamInfo()
void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys)
locateOutsideSeedPixel()
l_int32 boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
l_int32 ccbaStepChainsToPixCoords(CCBORDA *ccba, l_int32 coordtype)
ccbaStepChainsToPixCoords()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
PIX * ccbaDisplayImage2(CCBORDA *ccba)
ccbaDisplayImage2()
char * ccbaWriteSVGString(const char *filename, CCBORDA *ccba)
ccbaWriteSVGString()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_uint8 * bbufferDestroyAndSaveData(L_BBUFFER **pbb, size_t *pnbytes)
bbufferDestroyAndSaveData()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
static l_int32 ccbaExtendArray(CCBORDA *ccba)
ccbaExtendArray()
l_int32 numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag)
numaaAddNuma()
BOX * boxClone(BOX *box)
boxClone()
l_int32 pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy)
pixRasterop()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
static const l_int32 L_INSERT
l_int32 ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
PTA * ptaClone(PTA *pta)
ptaClone()
PTA * getCutPathForHole(PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen)
getCutPathForHole()
l_int32 ptaEmpty(PTA *pta)
ptaEmpty()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
PTA * ptaCyclicPerm(PTA *ptas, l_int32 xs, l_int32 ys)
ptaCyclicPerm()
l_int32 ptaContainsPt(PTA *pta, l_int32 x, l_int32 y)
ptaContainsPt()
l_int32 boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
l_int32 findNextBorderPixel(l_int32 w, l_int32 h, l_uint32 *data, l_int32 wpl, l_int32 px, l_int32 py, l_int32 *pqpos, l_int32 *pnpx, l_int32 *pnpy)
findNextBorderPixel()
l_int32 ccbaGenerateGlobalLocs(CCBORDA *ccba)
ccbaGenerateGlobalLocs()
PIX * pixClone(PIX *pixs)
pixClone()
l_int32 sarrayAddString(SARRAY *sa, char *string, l_int32 copyflag)
sarrayAddString()
void pixDestroy(PIX **ppix)
pixDestroy()
l_uint8 * zlibUncompress(l_uint8 *datain, size_t nin, size_t *pnout)
zlibUncompress()
PIX * pixFillClosedBorders(PIX *pixs, l_int32 connectivity)
pixFillClosedBorders()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
void numaDestroy(NUMA **pna)
numaDestroy()
void bbufferDestroy(L_BBUFFER **pbb)
bbufferDestroy()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_int32 ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
l_int32 pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
l_int32 l_binaryWrite(const char *filename, const char *operation, void *data, size_t nbytes)
l_binaryWrite()
l_int32 bbufferRead(L_BBUFFER *bb, l_uint8 *src, l_int32 nbytes)
bbufferRead()
l_int32 numaaGetCount(NUMAA *naa)
numaaGetCount()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
void ccbDestroy(CCBORD **pccb)
ccbDestroy()
void ptaDestroy(PTA **ppta)
ptaDestroy()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_int32 numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
ptaTransform()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PTA * pixGetOuterBorderPta(PIX *pixs, BOX *box)
pixGetOuterBorderPta()
PTA * ptaReverse(PTA *ptas, l_int32 type)
ptaReverse()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
L_BBUFFER * bbufferCreate(l_uint8 *indata, l_int32 nalloc)
bbufferCreate()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
PTAA * pixGetOuterBordersPtaa(PIX *pixs)
pixGetOuterBordersPtaa()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
l_int32 ccbaGenerateSPGlobalLocs(CCBORDA *ccba, l_int32 ptsflag)
ccbaGenerateSPGlobalLocs()