📄 filtercolorcube.cc
字号:
const char *help = "\progname: filtercolorcube.cc\n\code2html: This program reads a ppm image and filter it using a colorcube.\n\version: Torch3 vision2.0, 2004-2005\n\(c) Sebastien Marcel (marcel@idiap.ch)\n";#include "ImageRgb.h"#include "ipColorCube.h"#include "ipConnectedComponents.h"#include "DiskXFile.h"#include "xtprobeImageDiskXFile.h"#include "Rectangle2D.h"#include "Octon2D.h"#include "CmdLine.h"using namespace Torch;int main(int argc, char **argv){ char *image_filename; char *colorcube_filename; bool cc; int min_size; int max_size; int cn; bool octon; bool verbose; // Construct the command line CmdLine cmd; cmd.setBOption("write log", false); // Put the help line at the beginning cmd.info(help); cmd.addText("\nArguments:"); cmd.addSCmdArg("image filename", &image_filename, "image filename"); cmd.addSCmdArg("colorcube filename", &colorcube_filename, "colorcube filename"); cmd.addText("\nOptions:"); cmd.addBCmdOption("-verbose", &verbose, false, "verbose"); cmd.addBCmdOption("-cc", &cc, false, "computes connected components"); cmd.addICmdOption("-minsize", &min_size, 500, "minimum size"); cmd.addICmdOption("-maxsize", &max_size, 100000, "maximum size"); cmd.addICmdOption("-cn", &cn, 4, "connected neighbourhood (4 or 8)"); cmd.addBCmdOption("-octon", &octon, false, "uses octon instead of rectangles"); cmd.read(argc, argv); Image *image_in = NULL; Image *image_out = NULL; image_in = new ImageRgb(); image_in->setBOption("verbose", verbose); ImageDiskXFile *image_loader = new xtprobeImageDiskXFile(image_filename, "r"); image_in->loadImageXFile(image_loader); delete image_loader; 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); } ipColorCube *imachine = NULL; imachine = new ipColorCube(image_in->width, image_in->height, "rgb", 160); imachine->setBOption("verbose", verbose); imachine->load(colorcube_filename); imachine->process(image_in); image_out = new ImageRgb(); image_out->setBOption("verbose", verbose); image_out->copyFrom(image_in->width, image_in->height, imachine->seq_out->frames[0], "rgb"); if(cc) { Sequence *seq_in = new Sequence(&imachine->realbinaryimage, 1, image_in->width * image_in->height); roiCollector *collector = NULL; if(octon) collector = new octonRoiCollector(); else collector = new rectRoiCollector(); ipCore *ipcc = new ipConnectedComponents(image_in->width, image_in->height, "gray", collector, min_size, max_size, cn); ipcc->setBOption("verbose", verbose); ipcc->process(seq_in); if(verbose) print("n_roi = %d\n", collector->n_roi); if(octon) { sOcton *oroi = (sOcton *) collector->roi; for(int i = 0 ; i < collector->n_roi ; i++) { if(verbose) print(" x=%4d y=%5d w=%4d h=%4d\n", oroi[i].x_min, oroi[i].y_min, oroi[i].width, oroi[i].height); Octon2D octon(oroi[i]); octon.draw(image_out, green); } } else { sRect2D *rroi = (sRect2D *) collector->roi; for(int i = 0 ; i < collector->n_roi ; i++) { if(verbose) print(" x=%4d y=%5d w=%4d h=%4d\n", rroi[i].x, rroi[i].y, rroi[i].w, rroi[i].h); Rectangle2D rect(rroi[i]); rect.draw(image_out, green); } } ImageRgb *blobimage = new ImageRgb(image_in->width, image_in->height); for(int y = 0; y < image_in->height; y++) for(int x = 0; x < image_in->width; x++) { int label_ = (int) ipcc->seq_out->frames[0][y*image_in->width+x]; Color c; if(label_ == 0) c = white; else if(label_ == 1) c = red; else if(label_ == 2) c = green; else if(label_ == 3) c = blue; else if(label_ == 4) c = yellow; else if(label_ == 5) c = cyan; else if(label_ == 6) c = pink; else if(label_ == 7) c = orange; else c = black; blobimage->drawpixel(x, y, c); } blobimage->save("blob.ppm"); delete blobimage; delete ipcc; delete collector; delete seq_in; } DiskXFile *image_file = new DiskXFile("filter.ppm", "w"); image_out->saveXFile(image_file); delete image_file; delete imachine; delete image_out; delete image_in; return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -