void lineto(FILE *output, double xs, double ys, double xf, double yf) { int ixs, iys, ixf, iyf; ixs = xmap(xs, ys); iys = ymap(xs, ys); ixf = xmap(xf, yf); iyf = ymap(xf, yf); if (ixs == ixf && iys == iyf) { saywhere(stdout); printf("Worthless lineto (%lg %lg %lg %lg)\n", xs, ys, xf, yf); } else fprintf(output, "%d %d l\n", ixf, iyf); }
void TranslationWarperBase<P>::warpBackward(InputArray src, InputArray K, InputArray R, InputArray t, int interp_mode, int border_mode, Size dst_size, OutputArray dst) { projector_.setCameraParams(K, R, t); Point src_tl, src_br; detectResultRoi(dst_size, src_tl, src_br); Size size = src.size(); CV_Assert(src_br.x - src_tl.x + 1 == size.width && src_br.y - src_tl.y + 1 == size.height); Mat xmap(dst_size, CV_32F); Mat ymap(dst_size, CV_32F); float u, v; for (int y = 0; y < dst_size.height; ++y) { for (int x = 0; x < dst_size.width; ++x) { projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v); xmap.at<float>(y, x) = u - src_tl.x; ymap.at<float>(y, x) = v - src_tl.y; } } dst.create(dst_size, src.type()); remap(src, dst, xmap, ymap, interp_mode, border_mode); }
GPU_PERF_TEST(Remap, cv::gpu::DeviceInfo, cv::Size, MatType, Interpolation, BorderMode) { cv::gpu::DeviceInfo devInfo = GET_PARAM(0); cv::gpu::setDevice(devInfo.deviceID()); cv::Size size = GET_PARAM(1); int type = GET_PARAM(2); int interpolation = GET_PARAM(3); int borderMode = GET_PARAM(4); cv::Mat src_host(size, type); fill(src_host, 0, 255); cv::Mat xmap_host(size, CV_32FC1); fill(xmap_host, 0, size.width); cv::Mat ymap_host(size, CV_32FC1); fill(ymap_host, 0, size.height); cv::gpu::GpuMat src(src_host); cv::gpu::GpuMat xmap(xmap_host); cv::gpu::GpuMat ymap(ymap_host); cv::gpu::GpuMat dst; cv::gpu::remap(src, dst, xmap, ymap, interpolation, borderMode); declare.time(3.0); TEST_CYCLE() { cv::gpu::remap(src, dst, xmap, ymap, interpolation, borderMode); } }
void curveto(FILE *output, double xs, double ys, double xa, double ya, double xb, double yb, double xf, double yf) { int ixs, iys, ixa, iya, ixb, iyb, ixf, iyf; ixs = xmap(xs, ys); iys = ymap(xs, ys); ixa = xmap(xa, ya); iya = ymap(xa, ya); ixb = xmap(xb, yb); iyb = ymap(xb, yb); ixf = xmap(xf, yf); iyf = ymap(xf, yf); if (ixs == ixf && iys == iyf) { saywhere(stdout); printf("Worthless curveto (%lg %lg %lg %lg %lg %lg %lg %lg)\n", xs, ys, xa, ya, xb, yb, xf, yf); } else fprintf(output, "%d %d %d %d %d %d c\n", ixa, iya, ixb, iyb, ixf, iyf); }
void RotationWarperBase<P>::warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode, Size dst_size, Mat &dst) { projector_.setCameraParams(K, R); Point src_tl, src_br; detectResultRoi(dst_size, src_tl, src_br); CV_Assert(src_br.x - src_tl.x + 1 == src.cols && src_br.y - src_tl.y + 1 == src.rows); Mat xmap(dst_size, CV_32F); Mat ymap(dst_size, CV_32F); float u, v; for (int y = 0; y < dst_size.height; ++y) { for (int x = 0; x < dst_size.width; ++x) { projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v); xmap.at<float>(y, x) = u - src_tl.x; ymap.at<float>(y, x) = v - src_tl.y; } } dst.create(dst_size, src.type()); remap(src, dst, xmap, ymap, interp_mode, border_mode); }
int parseeuler(FILE *output, FILE *input) { double xstart, ystart; int n, nn, lineflag=0, lineflagn; double xs, ys, us, vs, xf, yf, uf, vf; double xsn, ysn, usn, vsn, ufn, vfn; double w; int width, widthbogus, wa, wb, m; int slannum=0, slanden=1; char *s; /* xf, yf, nn may be used before being initialized ? */ /* lineflagn may be used before being initialized ? */ for(;;) { /* scan over preamble - up to `charbegin' */ if (fgets(buffer, MAXLINE, input) == NULL) { fprintf(errout, "EOF\n"); return -1; } line++; if (*buffer == '%' || *buffer == '\n') continue; if (strstr(buffer, "adj_fill") != NULL) break; /* continue char */ /* if (strstr(buffer, "((") != NULL) break; *//* continue char */ if (strncmp(buffer, "endinput", 8) == 0) return -1; /* EOF */ if (strncmp(buffer, "more_side", 9) == 0) { if(sscanf(buffer, "more_side(%lg", &moreside) < 1) { dontunder(); } else if (traceflag != 0) printf("%s (%lg)", buffer, moreside); } if (strncmp(buffer, "initrot", 7) == 0) { if (sscanf(buffer, "initrot:=identity shifted(0,%lgv)", &initshift) < 1) { if (strncmp(buffer, "initrot:=identity;", 18) == 0) initshift=0; else dontunder(); } if (traceflag != 0) printf("%s (%lg)", buffer, initshift); } if (strncmp(buffer, "charbegin", 9) == 0) { if (traceflag != 0) printf("%s", buffer); s = buffer; if (strchr(s, '"') != NULL) { /* quoted char name */ if (sscanf(s, "charbegin( \"%c\",%n", charname, &m) > 0) { s += m; charname[1] = '\0'; chrs = (int) charname[0]; if (charname[0] >= '0' && charname[0] <= '9') replacedigit(charname); } else dontunder(); } else { /* character number */ if (sscanf(s, "charbegin( %d,%n", &chrs, &m) > 0) { s += m; charname[0] = '\0'; } else dontunder(); } widthbogus = 0; if (sscanf(s, "%dh", &width) > 0) { /* normal case */ if (strchr(s, '+') != NULL || strchr(s, '-') != NULL) { widthbogus = 1; if (traceflag != 0) printf("Width (%d) Bogus\n", width); } } else if (sscanf(s, " (%d+%d)*", &wa, &wb) == 2) { width = wa + wb; } else if (sscanf(s, " (%d-%d)*", &wa, &wb) == 2) { width = wa - wb; } else dontunder(); width = widths[chrs]; /* NEW */ sidebearing = offsets[chrs]; /* NEW */ mathcorrection = mathcorr[chrs]; /* NEW */ w = (double) width + moreside * 2.0 - mathcorrection; w = w + leftside + rightside; if (charname[0] != '\0') fprintf(output, "]\n%d %d %% %s\n", chrs, wmap(w), charname); else fprintf(output, "]\n%d %d\n", chrs, wmap(w)); /* deal with more complex width formats above ? OK */ if (traceflag != 0) printf("Read charbegin for char %d width %d\n", chrs, width); rotate = 0.0; cosrot = 1.0; sinrot = 0.0; xshift = 0.0; yshift = 0.0; slant = 0.0; break; } } for(;;) { /* scan over preamble - up to first moveto */ if (fgets(buffer, MAXLINE, input) == NULL) { fprintf(errout, "Unexpected EOF (%s)\n", "A"); return -1; } line++; if (*buffer == '%' || *buffer == '\n') continue; if ((s = strstr(buffer, "rot :=")) != NULL) { if (traceflag != 0) printf("chrs %d %s", chrs, buffer); if (strstr(s, "rotatedaround") != NULL) { if (sscanf(s, "rot := identity rotatedaround((%lgh,%lgv),%lg)", &xcenter, &ycenter, &rotate) < 3) dontunder(); rotate = rotate * pi / 180.0; cosrot = cos(rotate); sinrot = sin(rotate); xshift = xcenter -xcenter * cos(rotate) + ycenter * sin(rotate); yshift = ycenter - xcenter * sin(rotate) - ycenter * cos(rotate); } else if(sscanf(s, "rot := identity rotated %lg%n", &rotate, &n) == 1) { s += n; rotate = rotate * pi / 180.0; cosrot = cos(rotate); sinrot = sin(rotate); xshift = 0.0; yshift = 0.0; /* ??? */ if(sscanf(s, " shifted (%lgh,%lgv)", &xshift, &yshift) < 2) { if(sscanf(s, " shifted (0,%lgv)", &yshift) < 1) { if(sscanf(s, " shifted (%lgh,0)", &xshift) < 1) dontunder(); } } } else if(sscanf(s, "rot := rot shifted (%lgh,%lgv)", &xshift, &yshift) == 2) { /* debugging only */ printf("dx %lg dy %lg char %d\n", xshift, yshift, chrs); } else if (sscanf(s, "rot := identity slanted %d/%d", &slannum, &slanden) == 2) { slant = (double) slannum / slanden; printf("Switching to slant %lg\n", slant); /* debug */ } else dontunder(); } if ((s = strstr(buffer, "slant")) != NULL) { /* new */ if (sscanf(s, "slant %d/%d", &slannum, &slanden) > 0) { if (slannum == 0) slanden = 1; slant = (double) slannum / slanden; printf("Switching to slant %lg\n", slant); /* debug */ } else if (strstr(buffer, "slanted") == NULL) dontunder(); } if (strstr(buffer, "...") != NULL) { lineflag = 0; break; } else if (strstr(buffer, "--") != NULL) { lineflag = 1; break; } /* if (strstr(buffer, "((") != NULL) break; */ } if (traceflag != 0) printf("%s", buffer); if (lineflag == 0) { n = sscanf(buffer, " ((%lg,%lg){%lg,%lg}...{%lg,%lg}", &xs, &ys, &us, &vs, &uf, &vf); if (n < 4) { dontunder(); (void) scantoend(input); return 0; } if (allowslant != 0 && slant != 0.0) { xs = xs + ys * slant; us = us + vs * slant; uf = uf + vf * slant; } /* if (traceflag != 0) printf("Read ... form\n"); */ } else { n = sscanf(buffer, " ((%lg,%lg)--", &xs, &ys); if (n < 2) { dontunder(); (void) scantoend(input); return 0; } if (allowslant != 0 && slant != 0.0) { xs = xs + ys * slant; } /* if (traceflag != 0) printf("Read -- form\n"); */ } xstart = xs; ystart = ys; /* remember for closing at end */ fprintf(output, "%d %d m\n", xmap(xs, ys), ymap(xs, ys)); /* moveto */ /* if (traceflag != 0) printf("Starting point (%lg %lg)\n", xstart, ystart); */ /* read charpath - continue until hit line containing "cycle" */ for(;;) { if (fgets(buffer, MAXLINE, input) == NULL) { fprintf(errout, "Unexpected EOF (%s)\n", "B"); return -1; } line++; if (*buffer == '%' || *buffer == '\n') continue; if ((s = strstr(buffer, "slant")) != NULL) { /* new */ if (sscanf(s, "slant %d/%d", &slannum, &slanden) > 0) { if (slannum == 0) slanden = 1; slant = (double) slannum / slanden; printf("Switching to slant %lg\n", slant); /* debug */ } else dontunder(); continue; } if (strstr(buffer, "((") != NULL) { dontunder(); (void) scantoend(input); break; } else if (strchr(buffer, '+') != NULL) { dontunder(); (void) scantoend(input); break; } else if (strstr(buffer, "...") != NULL) { lineflagn = 0; nn = sscanf(buffer, " (%lg,%lg){%lg,%lg}...{%lg,%lg}", &xsn, &ysn, &usn, &vsn, &ufn, &vfn); if (nn < 4) { dontunder(); continue; /* IGNORE THIS POINT IF POSSIBLE */ } if (allowslant != 0 && slant != 0.0) { xsn = xsn + ysn * slant; usn = usn + vsn * slant; ufn= ufn + vfn * slant; } if (n < 6) { /* copy finish tangent direction previous */ uf = usn; vf = vsn; } } else if (strstr(buffer, "--") != NULL) { lineflagn = 1; nn = sscanf(buffer, " (%lg,%lg)--", &xsn, &ysn); if (nn < 2) { dontunder(); continue; /* IGNORE THIS POINT IF POSSIBLE */ } if (allowslant != 0 && slant != 0.0) { xsn = xsn + ysn * slant; } if (n < 6) { /* copy finish tangent direction previous */ if (lineflag == 0) { /* OK if previous was "--" also */ saywhere(stdout); printf("Incomplete curveto before lineto\n"); uf = us; vf = vs; /* is this OK ??? */ } } } xf = xsn; yf = ysn; /* finish of previous is start of new */ if (lineflag == 0) (void) smoothknots(output, xs, ys, us, vs, xf, yf, uf, vf); else if (xf != xs || yf != ys) /* fprintf(output, "%d %d l\n", xmap(xf, yf), ymap(xf, yf)); */ lineto(output, xs, ys, xf, yf); else { saywhere(stdout); printf("Coincident ends (%lg %lg)\n", xf, yf); } /* get ready for next */ xs = xsn; ys = ysn; us = usn; vs = vsn; uf = ufn, vf = vfn; lineflag = lineflagn; n = nn; if (strstr(buffer, "cycle") != NULL) { /* if (lineflag == 0) (void) smoothknots(output, xs, ys, us, vs, xf, yf, uf, vf); else fprintf(output, "%d %d l\n", xmap(xf, yf), ymap(xf, yf)); */ break; } } /* this may be the end of the character, or there may be other paths */ if (traceflag != 0) printf("%s", buffer); /* close the loop now */ if (xstart != xf || ystart != yf) /* don't output worthless lineto */ /* fprintf(output, "%d %d l\n", xmap(xstart, ystart), ymap(xstart, ystart)); */ lineto(output, xs, ys, xstart, ystart); else if (traceflag != 0) printf("Path already closed\n"); fprintf(output, "h\n"); return 0; }