Big code refactor, now the interface is easier to use
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
#ifndef GENETIC_IMAGE_INCLUDE_GENIMG_COMMON_HH_
|
||||
#define GENETIC_IMAGE_INCLUDE_GENIMG_COMMON_HH_
|
||||
|
||||
#include <opencv2/core/core.hpp>
|
||||
#include <opencv2/highgui/highgui.hpp>
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
[[nodiscard]] auto init_image(std::string const&) noexcept
|
||||
-> std::pair<cv::Mat, cv::Mat>;
|
||||
|
||||
[[nodiscard]] auto euclidian_distance(cv::Mat const&, cv::Mat const&) -> double;
|
||||
|
||||
#endif /* GENETIC_IMAGE_INCLUDE_GENIMG_COMMON_HH_ */
|
||||
@@ -1,15 +0,0 @@
|
||||
#ifndef GENETIC_IMAGE_INCLUDE_GENIMG_DRAWING_HH_
|
||||
#define GENETIC_IMAGE_INCLUDE_GENIMG_DRAWING_HH_
|
||||
|
||||
#include <opencv2/core/core.hpp>
|
||||
#include <opencv2/highgui/highgui.hpp>
|
||||
|
||||
enum class Shapes { Square, Circle };
|
||||
|
||||
void draw_shape(cv::Mat&,
|
||||
cv::Point const&,
|
||||
int const,
|
||||
cv::Scalar const&,
|
||||
Shapes const&);
|
||||
|
||||
#endif /* GENETIC_IMAGE_INCLUDE_GENIMG_DRAWING_HH_ */
|
||||
@@ -1,50 +1,71 @@
|
||||
#ifndef GENETIC_IMAGE_INCLUDE_GENIMG_METHODS_HH_
|
||||
#define GENETIC_IMAGE_INCLUDE_GENIMG_METHODS_HH_
|
||||
#pragma once
|
||||
|
||||
#include <filesystem>
|
||||
#include <opencv2/core/core.hpp>
|
||||
#include <opencv2/highgui/highgui.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
namespace methods_private {
|
||||
class ImageManipulator {
|
||||
public:
|
||||
ImageManipulator() = delete;
|
||||
ImageManipulator(const ImageManipulator& other) = delete;
|
||||
ImageManipulator(ImageManipulator&& other) noexcept = delete;
|
||||
ImageManipulator& operator=(const ImageManipulator& other) = delete;
|
||||
ImageManipulator& operator=(ImageManipulator&& other) noexcept = delete;
|
||||
|
||||
[[nodiscard]] auto randomColor();
|
||||
[[nodiscard]] auto getColorSet(cv::Mat const& t_reference);
|
||||
[[nodiscard]] auto getSquareValues(cv::Mat const& t_img);
|
||||
[[nodiscard]] auto getControlledSquareValues(cv::Mat const& t_img,
|
||||
int const t_init_iter,
|
||||
int const t_iter);
|
||||
[[nodiscard]] auto createCandidate(
|
||||
cv::Mat const& t_base,
|
||||
cv::Mat const& t_ref,
|
||||
std::vector<std::array<uchar, 3>> const& t_colors,
|
||||
double const diff,
|
||||
bool const t_controlled_size,
|
||||
int const t_init_iter,
|
||||
int const t_iter);
|
||||
void adjustSize(cv::Mat const& t_process_img,
|
||||
cv::Point& t_top_left,
|
||||
int t_size);
|
||||
void threadedGetColor(cv::Mat const& t_reference,
|
||||
std::vector<std::array<uchar, 3>>& t_colors,
|
||||
int t_h);
|
||||
void newSquare1(cv::Mat& t_process_img, cv::Point&& t_top_left, int t_size);
|
||||
void newSquare2(cv::Mat& t_process_img,
|
||||
cv::Point&& t_top_left,
|
||||
int t_size,
|
||||
std::array<uchar, 3> const& t_color);
|
||||
// Load image from input, and prepare for output
|
||||
ImageManipulator(std::filesystem::path const t_input_path,
|
||||
std::filesystem::path const t_output_path,
|
||||
int const iterations);
|
||||
// ImageManipulator(cv::Mat const& t_origin_image,
|
||||
// int const iterations,
|
||||
// int const t_x,
|
||||
// int const t_y,
|
||||
// int const t_width,
|
||||
// int const t_height);
|
||||
|
||||
} // namespace methods_private
|
||||
void exec_method(int const t_nb_method, bool const t_controlled_size);
|
||||
void write_file() const;
|
||||
|
||||
void method1(cv::Mat const&, cv::Mat&, int);
|
||||
//! Destructor
|
||||
virtual ~ImageManipulator() noexcept = default;
|
||||
|
||||
void method2(cv::Mat const&, cv::Mat&, int);
|
||||
protected:
|
||||
private:
|
||||
[[nodiscard]] auto euclidian_distance(cv::Mat const& t_img) const noexcept
|
||||
-> double;
|
||||
[[nodiscard]] auto random_color() const noexcept;
|
||||
[[nodiscard]] auto get_square_values() const noexcept;
|
||||
[[nodiscard]] auto get_controlled_square_values() const noexcept;
|
||||
[[nodiscard]] auto create_candidate(bool const t_controlled_size) const;
|
||||
|
||||
void method3(cv::Mat const&, cv::Mat&, int);
|
||||
void get_color_set();
|
||||
void threaded_get_color(int t_h);
|
||||
void adjust_size(cv::Point& t_top_left, int const size) noexcept;
|
||||
void draw_square(cv::Mat& t_img,
|
||||
cv::Point const& t_top_left,
|
||||
int const t_size,
|
||||
cv::Scalar const& t_color) const;
|
||||
void update_gen_image(cv::Mat const& t_img, double const t_diff);
|
||||
void method1();
|
||||
void method2();
|
||||
void method3();
|
||||
void method4(bool const t_controlled_size);
|
||||
|
||||
void method4(cv::Mat const&, cv::Mat&, int, bool);
|
||||
|
||||
void method5(cv::Mat const&, cv::Mat&, int, int, bool);
|
||||
|
||||
#endif /* GENETIC_IMAGE_INCLUDE_GENIMG_METHODS_HH_ */
|
||||
std::vector<std::array<uchar, 3>> colors_
|
||||
= std::vector<std::array<uchar, 3>>{};
|
||||
cv::Mat const reference_;
|
||||
cv::Mat generated_image_;
|
||||
std::mutex colors_mutex_ = std::mutex{};
|
||||
std::string const output_path_;
|
||||
double diff_ = 0.0;
|
||||
int const total_iterations_ = 0;
|
||||
int remaining_iter_ = 0;
|
||||
int const width_;
|
||||
int const height_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user