#pragma once #include #include #include // std::shared_ptr #include // all opencv header #include namespace hdrplus { class RawpyArgs { public: int demosaic_algorithm = 3;// 3 - AHD interpolation <->int user_qual bool half_size = false; bool use_camera_wb = true; bool use_auto_wb = false; bool no_auto_bright = true; int output_color = LIBRAW_COLORSPACE_sRGB; int gamma[2] = { 1,1 }; //# gamma correction not applied by rawpy (not quite understand) int output_bps = 16; }; class Options { public: std::string input = ""; std::string output = ""; std::string mode = "full"; //'full' 'align' 'merge' 'finish' int reference = 0; float temporalfactor = 75.0; float spatialfactor = 0.1; int ltmGain = -1; double gtmContrast = 0.075; int verbose = 2; // (0, 1, 2, 3, 4, 5) }; class Tuning { public: std::string ltmGain = "auto"; double gtmContrast = 0.075; std::vector sharpenAmount{ 1,0.5,0.5 }; std::vector sharpenSigma{ 1,2,4 }; std::vector sharpenThreshold{ 0.02,0.04,0.06 }; }; class Parameters { public: std::unordered_map flags; RawpyArgs rawpyArgs; Options options; Tuning tuning; Parameters() { const char* keys[] = { "writeReferenceImage", "writeGammaReference", "writeMergedImage", "writeGammaMerged", "writeShortExposure", "writeLongExposure", "writeFusedExposure", "writeLTMImage", "writeLTMGamma", "writeGTMImage", "writeReferenceFinal", "writeFinalImage" }; for (int idx = 0; idx < sizeof(keys) / sizeof(const char*); idx++) { flags[keys[idx]] = true; } } }; cv::Mat postprocess(std::shared_ptr& libraw_ptr, RawpyArgs rawpyArgs); void setParams(std::shared_ptr& libraw_ptr, RawpyArgs rawpyArgs); } // namespace hdrplus