Path: blob/master/ExposureFusion/exposureFusion.cpp
3118 views
#include <opencv2/photo.hpp>1#include "opencv2/imgcodecs.hpp"2#include <opencv2/highgui.hpp>3#include <vector>4#include <iostream>5#include <fstream>6using namespace cv;7using namespace std;89// Read Images10void readImages(vector<Mat> &images)11{1213int numImages = 16;14static const char* filenames[] =15{16"images/memorial0061.jpg",17"images/memorial0062.jpg",18"images/memorial0063.jpg",19"images/memorial0064.jpg",20"images/memorial0065.jpg",21"images/memorial0066.jpg",22"images/memorial0067.jpg",23"images/memorial0068.jpg",24"images/memorial0069.jpg",25"images/memorial0070.jpg",26"images/memorial0071.jpg",27"images/memorial0072.jpg",28"images/memorial0073.jpg",29"images/memorial0074.jpg",30"images/memorial0075.jpg",31"images/memorial0076.jpg"32};3334for(int i=0; i < numImages; i++)35{36Mat im = imread(filenames[i]);37images.push_back(im);38}3940}4142int main(int argc, char **argv)43{44// Read images45cout << "Reading images ... " << endl;46vector<Mat> images;4748bool needsAlignment = true;49if(argc > 1)50{51// Read images from the command line52for(int i=1; i < argc; i++)53{54Mat im = imread(argv[i]);55images.push_back(im);56}5758}59else60{61// Read example images62readImages(images);63needsAlignment = false;64}6566// Align input images67if(needsAlignment)68{69cout << "Aligning images ... " << endl;70Ptr<AlignMTB> alignMTB = createAlignMTB();71alignMTB->process(images, images);72}73else74{75cout << "Skipping alignment ... " << endl;76}777879// Merge using Exposure Fusion80cout << "Merging using Exposure Fusion ... " << endl;81Mat exposureFusion;82Ptr<MergeMertens> mergeMertens = createMergeMertens();83mergeMertens->process(images, exposureFusion);8485// Save output image86cout << "Saving output ... exposure-fusion.jpg"<< endl;87imwrite("exposure-fusion.jpg", exposureFusion * 255);8889return EXIT_SUCCESS;90}919293