62 lines
2.1 KiB
C++
62 lines
2.1 KiB
C++
#include "parseargs.hh"
|
|
#include <boost/program_options.hpp>
|
|
#include <cstdlib>
|
|
#include <iostream>
|
|
|
|
constexpr int DEFAULT_ITERATIONS = 2000;
|
|
|
|
using path = std::filesystem::path;
|
|
namespace po = boost::program_options;
|
|
|
|
void processFilenames(po::variables_map const& vm,
|
|
path const& t_input,
|
|
path& t_output)
|
|
{
|
|
if (!vm.count("output")) {
|
|
t_output.replace_filename("output_"
|
|
+ std::string{t_input.filename().string()});
|
|
}
|
|
else if (!t_output.has_extension()) {
|
|
t_output.replace_extension(".png");
|
|
}
|
|
}
|
|
|
|
[[nodiscard]] auto parse_args(int t_ac, char** t_av)
|
|
-> std::tuple<path, path, int, int, int, bool, bool>
|
|
{
|
|
po::options_description desc("Allowed options");
|
|
desc.add_options()
|
|
("help,h", "Display this help message")
|
|
("input,i", po::value<path>(), "Input image")
|
|
("output,o", po::value<path>(),
|
|
"Image output path (default: \"output_\" + input path)")
|
|
("method,m", po::value<int>(), "Method number to be used (default: 1)")
|
|
("iterations,n", po::value<int>(), "Number of iterations (default: 2000)")
|
|
("size,s", "Controlled size of the random shapes (default: false)")
|
|
("division,d", po::value<int>(),
|
|
"For method 5, number of regions the reference image should be divided "
|
|
"into. For instance, -d4 will divide the reference image into a 4*4 "
|
|
"matrice of smaller images. (default: 1)")
|
|
("verbose,v", "Enables verbosity");
|
|
po::variables_map vm;
|
|
po::store(po::parse_command_line(t_ac, t_av, desc), vm);
|
|
po::notify(vm);
|
|
if (vm.count("help") || !vm.count("input")) {
|
|
std::cout << desc << "\n";
|
|
std::exit(!vm.count("help"));
|
|
}
|
|
|
|
auto const input_path = vm["input"].as<path>();
|
|
auto output_path
|
|
= vm.count("output") ? vm["output"].as<path>() : input_path.filename();
|
|
processFilenames(vm, input_path, output_path);
|
|
|
|
return std::make_tuple(
|
|
input_path, output_path,
|
|
vm.count("iterations") ? vm["iterations"].as<int>() : DEFAULT_ITERATIONS,
|
|
vm.count("method") ? vm["method"].as<int>() : 1,
|
|
vm.count("division") ? vm["division"].as<int>() : 1,
|
|
vm.count("size") ? true : false,
|
|
vm.count("verbose") ? true : false);
|
|
}
|