Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
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);
    }
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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;
}