#include #include #include #include static constexpr char OUTPUT_DIR[] = "./out"; static bool extensionMatches(const std::filesystem::path& path) { std::string extension = path.extension(); if(extension == ".png") return true; if(extension == ".PNG") return true; if(extension == ".jpg") return true; if(extension == ".JPG") return true; if(extension == ".jpeg") return true; return false; } int main(int argc, char** argv) { if(argc < 2) { std::cout<<"a directory must be specified\n"; return 1; } std::cout<<"Using folder "< images; const std::filesystem::path directoryPath{argv[1]}; for(const std::filesystem::directory_entry& dirent : std::filesystem::directory_iterator{directoryPath}) { std::string fileName = dirent.path().filename(); if(dirent.is_regular_file() && extensionMatches(dirent.path())) { std::cout<<"Found: "<> rounds; while(images.size() > 1) { std::cout<<"New round "<()); std::vector removeIndexies; for(size_t i = 0; i < images.size()-1; i+=2) { cv::Mat imageA = cv::imread(images[i]); cv::Mat imageB = cv::imread(images[i+1]); if(!imageA.data || !imageB.data) { std::cout<<"Images: "<= 0; --i) { rounds.back().push_back(images[removeIndexies[i]]); images.erase(images.begin()+removeIndexies[i]); } } for(size_t round = 0; round < rounds.size(); ++round) { std::string roundDirName = std::string("round_") + std::to_string(round); if(!std::filesystem::is_directory(outDirPath/roundDirName) && !std::filesystem::create_directory(outDirPath/roundDirName)) { std::cout<<"Could not create or read "<