You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.4 KiB
C++

3 years ago
#include <cstdio>
#include <string>
#include <vector>
#include <utility> // std::pair
3 years ago
#include <opencv2/opencv.hpp> // all opencv header
#include <exiv2/exiv2.hpp> // exiv2
3 years ago
#include "hdrplus/hdrplus_pipeline.h"
#include "hdrplus/burst.h"
#include "hdrplus/align.h"
#include "hdrplus/merge.h"
#include "hdrplus/finish.h"
3 years ago
namespace hdrplus
{
void hdrplus_pipeline::run_pipeline( \
const std::string& burst_path, \
const std::string& reference_image_path )
3 years ago
{
// Create burst of images
burst burst_images( burst_path, reference_image_path );
std::vector<std::vector<std::vector<std::pair<int, int>>>> alignments;
// Read exif tags
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(reference_image_path);
assert(image.get() != 0);
image->readMetadata();
Exiv2::ExifData &exifData = image->exifData();
if (exifData.empty()) {
std::string error(reference_image_path);
error += ": No Exif data found in the file";
std::cout << error << std::endl;
}
int ISO = exifData["Exif.Image.ISOSpeedRatings"].toLong();
int white_level = exifData["Exif.Image.WhiteLevel"].toLong();
double black_level = exifData["Exif.Image.BlackLevel"].toFloat();
// Run align
align_module.process( burst_images, alignments );
// Run merging
merge_module.process( burst_images, alignments, ISO, white_level, black_level );
// Run finishing
3 years ago
}
} // namespace hdrplus