⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filtercolorcube.cc

📁 torch tracking code, it is a good code
💻 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 + -