diff --git a/include/genimg/common.hh b/include/genimg/common.hh index 3f9e646..25d821b 100644 --- a/include/genimg/common.hh +++ b/include/genimg/common.hh @@ -3,12 +3,15 @@ #include #include +#include #include #include -#include +#include -std::tuple init_image(std::string const &t_input_file); +std::tuple init_image(std::string const &); -double euclidian_distance(cv::Mat const &t_img1, cv::Mat const &t_img2); +double euclidian_distance(cv::Mat const &, cv::Mat const &); + +cv::Scalar random_color(std::mt19937 &); #endif /* GENETIC_IMAGE_INCLUDE_GENIMG_COMMON_HH_ */ diff --git a/include/genimg/drawing.hh b/include/genimg/drawing.hh index 6fead7b..db0c615 100644 --- a/include/genimg/drawing.hh +++ b/include/genimg/drawing.hh @@ -6,7 +6,7 @@ enum class Shapes { Square, Circle }; -void draw_shape(cv::Mat &t_img, cv::Point const &t_top_left, int const t_size, - cv::Scalar const &t_color, Shapes const &t_shape); +void draw_shape(cv::Mat &, cv::Point const &, int const, cv::Scalar const &, + Shapes const &); #endif /* GENETIC_IMAGE_INCLUDE_GENIMG_DRAWING_HH_ */ diff --git a/include/genimg/parseargs.hh b/include/genimg/parseargs.hh index de1a4ac..28ebbd5 100644 --- a/include/genimg/parseargs.hh +++ b/include/genimg/parseargs.hh @@ -5,7 +5,7 @@ #include #include -std::tuple +std::tuple parse_args(int, char **); #endif /* GENETIC_IMAGE_INCLUDE_GENIMG_PARSEARGS_HH_ */ diff --git a/src/common.cc b/src/common.cc index bbab9a8..7b2258b 100644 --- a/src/common.cc +++ b/src/common.cc @@ -28,3 +28,8 @@ double euclidian_distance(cv::Mat const &t_img1, cv::Mat const &t_img2) { euclidian = std::sqrt(euclidian); return euclidian; } + +cv::Scalar random_color(std::mt19937 &t_gen) { + static std::uniform_int_distribution<> dis(0, 255); + return cv::Scalar(dis(t_gen), dis(t_gen), dis(t_gen)); +} diff --git a/src/main.cc b/src/main.cc index 350ae5e..51f5957 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,23 +1,27 @@ #include "common.hh" -#include "drawing.hh" +#include "method1.hh" #include "parseargs.hh" int main(int ac, char **av) { - auto const [input_file, output_file, video_output, iterations] = + auto const [input_file, output_file, video_output, iterations, method] = parse_args(ac, av); spdlog::info("Input file:\t{}", input_file.native()); spdlog::info("Output file:\t{}", output_file.native()); spdlog::info("Video output:\t{}", video_output); spdlog::info("Iterations:\t{}", iterations); auto [input_image, process_image] = init_image(input_file.native()); - spdlog::info("Euclidian distance: {}", - euclidian_distance(input_image, process_image)); + std::random_device rd; + std::mt19937 gen(rd()); - draw_shape(process_image, cv::Point{0, 0}, 10, cv::Scalar(100, 100, 100), - Shapes::Square); - - spdlog::info("Euclidian distance: {}", - euclidian_distance(input_image, process_image)); + switch (method) { + case 1: { + method1(input_image, process_image, iterations, gen); + break; + } + default: + spdlog::error("Requested method {} is not implemented."); + std::exit(-1); + } cv::imwrite(output_file.native(), process_image); diff --git a/src/parseargs.cc b/src/parseargs.cc index b227f22..a573f03 100644 --- a/src/parseargs.cc +++ b/src/parseargs.cc @@ -21,14 +21,16 @@ void processFilenames(po::variables_map const &vm, path const &t_input, } } -std::tuple parse_args(int t_ac, char **t_av) { +std::tuple parse_args(int t_ac, char **t_av) { po::options_description desc("Allowed options"); - desc.add_options()("help,h", "Display this help message")( - "input,i", po::value(), "Input image")( - "output,o", po::value(), - "Image or video output path (default: input path + \"_output\")")( - "iterations,n", po::value(), - "Number of iterations (default: 5000)")("video,v", "Enable video output"); + desc.add_options() + ("help,h", "Display this help message") + ("input,i", po::value(), "Input image") + ("output,o", po::value(), + "Image or video output path (default: input path + \"_output\")") + ("method,m", po::value(), "Method number to be used (default: 1)") + ("iterations,n", po::value(), "Number of iterations (default: 5000)") + ("video,v", "Enable video output"); po::variables_map vm; po::store(po::parse_command_line(t_ac, t_av, desc), vm); po::notify(vm); @@ -43,6 +45,9 @@ std::tuple parse_args(int t_ac, char **t_av) { processFilenames(vm, input_path, output_path); return std::make_tuple( - input_path, output_path, vm.count("video") ? true : false, - vm.count("iterations") ? vm["iterations"].as() : DEFAULT_ITERATIONS); + input_path, + output_path, + vm.count("video") ? true : false, + vm.count("iterations") ? vm["iterations"].as() : DEFAULT_ITERATIONS, + vm.count("method") ? vm["method"].as() : 1); }