📄 main.cpp
字号:
// main.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <tchar.h>
using std::cout;
using std::cerr;
using std::endl;
#include "../cimpl/cimpl.h"
using namespace CIMPL;
#include "../cimpl/cimpltoolboxes.h"
using namespace IO;
using namespace MathCore;
using namespace Analysis;
using namespace Blas;
using namespace Lapack;
using namespace LevelSetMethods;
using namespace ImageProcessing;
using namespace PDE;
using namespace ImageMagick;
int main(int argc, char* argv[])
{
if(argc != 11)
{
Utility::RunTimeError("You need to enter 10 command line arguments!");
}
char *imname = argv[1];
bool normalized = (atoi(argv[2]) == 1) ? true : false;
float initScale = atof(argv[3]);
float scaleJump = atof(argv[4]);
float endScale = atof(argv[5]);
float angleLimit = atof(argv[6]);
float ratioLimit = atof(argv[7]);
float smoothWeighting = atof(argv[8]);
float stopError = atof(argv[9]);
int accuracy = atoi(argv[10]);
if( accuracy != 1 && accuracy != 2 && accuracy != 3 && accuracy != 5 )
{
Utility::RunTimeError("The commandline argument 'accuracy' can only be 1, 2, 3, or 5!");
}
MatrixList<float> RGB = ToFloat(ImRead(imname));
if(RGB.Planes() == 4)
{
RGB.PopBack();
}
MatrixList<float> image;
Matrix<float> im;
cout << "Processing " << imname << endl;
bool grayscale = true;
if(RGB.Planes() == 3)
{
cout << "Color image (" << RGB.Rows() << "x" << RGB.Columns() << ")" << endl << endl;
image = RGB2Lab(RGB);
grayscale = false;
}
else if(RGB.Planes() == 1)
{
cout << "Gray scale image (" << RGB.Rows() << "x" << RGB.Columns() << ")" << endl << endl;
im = RGB[0];
grayscale = true;
}
if(grayscale)
{
PerfTimer pt;
pt.Tic();
Matrix<int> edges = SegmentEF(im, normalized, initScale, scaleJump, endScale, angleLimit,
ratioLimit, smoothWeighting, stopError, accuracy);
double el = pt.Toc(false);
cout << endl << "Total Time: " << el << " seconds" << endl;
ImWrite( edges, "edges.png");
ImWrite( (im-330.0f)*ToFloat(1-edges), "segmentation.png");
}
else
{
//Matrix<int> edges = SegmentEF(image, false, 4, 1, 10, 60, 25, 1.0, 0.2, 2);
//Matrix<int> edges = SegmentEF(image, true, 5, 1, 15, 90, 15, 2.0, 0.1, 2);
PerfTimer pt;
pt.Tic();
Matrix<int> edges = SegmentEF(image, normalized, initScale, scaleJump, endScale, angleLimit,
ratioLimit, smoothWeighting, stopError, accuracy);
double el = pt.Toc(false);
cout << endl << "Total Time: " << el << " seconds" << endl;
ImWrite(edges, "edges.png");
MatrixList<float> tmpIm;
tmpIm.PushBack((RGB[0]-330.0f)*ToFloat(1-edges));
tmpIm.PushBack((RGB[1]-330.0f)*ToFloat(1-edges));
tmpIm.PushBack((RGB[2]-330.0f)*ToFloat(1-edges));
ImWrite(tmpIm, "segmentation.png");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -