#include #include #include #include "a2.h" #include "bounding_box.h" #include "mapping.h" #include "mask.h" #include "pack.h" #include "png.h" namespace fs = std::filesystem; int main(int argc, const char* argv[]) { // We take an image path and a list of points (grouped by 4 to define // bounding boxes). if (argc < 6 or (argc - 2) % 4 != 0) { std::cerr << "Usage: " << argv[0] << " path/to/image" << " [x y width height ...]\n" << "x/y/w/h points must be grouped by 4 to define bounding boxes\n"; return 1; } const fs::path input(argv[1]); if (!fs::exists(input)) { std::cerr << "Input file " << input << " does not exist.\n"; return 1; } const std::optional in_frame = freling::load_png(input); if (!in_frame) { std::cerr << "Cannot load file " << input << "\n"; return 1; } int i = 2; std::vector bboxes; bboxes.reserve((argc - 2) / 4); while (i < argc) { const int32_t x = atoi(argv[i]); const int32_t y = atoi(argv[i + 1]); const uint32_t w = atoi(argv[i + 2]); const uint32_t h = atoi(argv[i + 3]); bboxes.push_back(freling::BoundingBox({x, y, w, h})); i += 4; } freling::Mask in_mask(in_frame->width, in_frame->height); std::vector packed_bboxes; std::optional regions = pack(*in_frame, bboxes, packed_bboxes); in_mask.fill(false); for (const auto& b : bboxes) { for (int j = b.y; j < b.y + b.height; ++j) { for (int i = b.x; i < b.x + b.width; ++i) { in_mask.set(i, j, true); } } }; std::vector a2_bboxes = freling::A2(packed_bboxes); std::vector a2_bboxes_origin = freling::map_to_origin(bboxes, packed_bboxes, a2_bboxes); return 0; }