1 #include <opencv2/photo.hpp>
2 #include "opencv2/imgcodecs.hpp"
3 #include <opencv2/highgui.hpp>
4 #include <vector>
5 #include <iostream>
6 #include <fstream>
7
8 using namespace cv;
9 using namespace std;
10
11 void loadExposureSeq(String, vector<Mat>&, vector<float>&);
12
main(int,char ** argv)13 int main(int, char**argv)
14 {
15 vector<Mat> images;
16 vector<float> times;
17 loadExposureSeq(argv[1], images, times);
18
19 Mat response;
20 Ptr<CalibrateDebevec> calibrate = createCalibrateDebevec();
21 calibrate->process(images, response, times);
22
23 Mat hdr;
24 Ptr<MergeDebevec> merge_debevec = createMergeDebevec();
25 merge_debevec->process(images, hdr, times, response);
26
27 Mat ldr;
28 Ptr<TonemapDurand> tonemap = createTonemapDurand(2.2f);
29 tonemap->process(hdr, ldr);
30
31 Mat fusion;
32 Ptr<MergeMertens> merge_mertens = createMergeMertens();
33 merge_mertens->process(images, fusion);
34
35 imwrite("fusion.png", fusion * 255);
36 imwrite("ldr.png", ldr * 255);
37 imwrite("hdr.hdr", hdr);
38
39 return 0;
40 }
41
loadExposureSeq(String path,vector<Mat> & images,vector<float> & times)42 void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times)
43 {
44 path = path + std::string("/");
45 ifstream list_file((path + "list.txt").c_str());
46 string name;
47 float val;
48 while(list_file >> name >> val) {
49 Mat img = imread(path + name);
50 images.push_back(img);
51 times.push_back(1 / val);
52 }
53 list_file.close();
54 }
55