📄 warp.cc
字号:
const char *help = "\progname: warp.cc\n\code2html: This program reads a ppm image and 2 sets of landmark points and warp the image.\n\version: Torch3 vision2.0, 2005\n\(c) Sebastien Marcel (marcel@idiap.ch)\n";#include "ImageGray.h"#include "xtprobeImageDiskXFile.h"#include "ipWarp.h"#include "DiskXFile.h"#include "CmdLine.h"using namespace Torch;int main(int argc, char **argv){ char *image_filename; char *ldm_in_filename; char *ldm_out_filename; bool verbose; CmdLine cmd; cmd.setBOption("write log", false); cmd.info(help); cmd.addText("\nArguments:"); cmd.addSCmdArg("image filename", &image_filename, "image filename"); cmd.addSCmdArg("input landmark filename", &ldm_in_filename, "input landmark filename"); cmd.addSCmdArg("output landmark filename", &ldm_out_filename, "output landmark filename"); cmd.addText("\nOptions:"); cmd.addBCmdOption("-verbose", &verbose, false, "verbose"); cmd.read(argc, argv); Image *image_in = NULL; Image *image_out = NULL; ImageDiskXFile *image_file = NULL; image_in = new ImageGray(); image_file = new xtprobeImageDiskXFile(image_filename, "r"); if(!image_in->loadImageXFile(image_file)) error("Impossible to load the image"); delete image_file; if(verbose) { print("Image info:\n"); print(" width = %d\n", image_in->width); print(" height = %d\n", image_in->height); print(" format = %s (%d)\n", image_in->coding, image_in->n_planes); } DiskXFile *file_in = new DiskXFile(ldm_in_filename, "r"); DiskXFile *file_out = new DiskXFile(ldm_out_filename, "r"); int n_ldm; file_in->scanf("%d", &n_ldm); sPoint2D *ldm_in = new sPoint2D [n_ldm]; //sPoint2D *ldm_in = new sPoint2D [n_ldm+image_in->width*2+(image_in->height-2)*2]; if(verbose) print("n_ldm in = %d\n", n_ldm); for(int i = 0 ; i < n_ldm ; i++) { int x, y; file_in->scanf("%d", &x); file_in->scanf("%d", &y); ldm_in[i].x = x; ldm_in[i].y = y; if(verbose) print(" ldm[%4d] = %g %g\n", i, ldm_in[i].x, ldm_in[i].y); } /* for(int i = 0 ; i < image_in->width ; i++) { ldm_in[n_ldm].x = i; ldm_in[n_ldm].y = 0; n_ldm++; ldm_in[n_ldm].x = i; ldm_in[n_ldm].y = image_in->height-1; n_ldm++; } for(int i = 1 ; i < image_in->height-1 ; i++) { ldm_in[n_ldm].x = 0; ldm_in[n_ldm].y = i; n_ldm++; ldm_in[n_ldm].x = image_in->width-1; ldm_in[n_ldm].y = i; n_ldm++; } */ file_out->scanf("%d", &n_ldm); sPoint2D *ldm_out = new sPoint2D [n_ldm]; //sPoint2D *ldm_out = new sPoint2D [n_ldm+image_in->width*2+(image_in->height-2)*2]; if(verbose) print("n_ldm out = %d\n", n_ldm); for(int i = 0 ; i < n_ldm ; i++) { int x, y; file_out->scanf("%d", &x); file_out->scanf("%d", &y); ldm_out[i].x = x; ldm_out[i].y = y; if(verbose) print(" ldm[%4d] = %g %g\n", i, ldm_out[i].x, ldm_out[i].y); } /* for(int i = 0 ; i < image_in->width ; i++) { ldm_out[n_ldm].x = i; ldm_out[n_ldm].y = 0; n_ldm++; ldm_out[n_ldm].x = i; ldm_out[n_ldm].y = image_in->height-1; n_ldm++; } for(int i = 1 ; i < image_in->height-1 ; i++) { ldm_out[n_ldm].x = 0; ldm_out[n_ldm].y = i; n_ldm++; ldm_out[n_ldm].x = image_in->width-1; ldm_out[n_ldm].y = i; n_ldm++; } */ ipCore *warp = NULL; warp = new ipWarp(image_in->width, image_in->height, "gray", n_ldm, ldm_in, ldm_out); warp->setBOption("verbose", verbose); warp->process(image_in); image_out = new ImageGray(); image_out->setBOption("verbose", verbose); image_out->copyFrom(image_in->width, image_in->height, warp->seq_out->frames[0], "gray"); image_out->save("warp.pgm"); delete [] ldm_out; delete [] ldm_in; delete file_in; delete file_out; delete warp; delete image_out; delete image_in; return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -