【OpenCV】合成并显示高动态图像

合成并显示高动态图像

环境:VS2017 + OpenCV3.4.1

原图

HDR图像

LDR图像

步骤:

(1)设置好测试图片序列的路径

注意:需要将图片设置为同样大小,否则会出错

(2)修改一下list文件中的内容,第二项为曝光时间

程序:

#include "opencv2/photo.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"

#include <vector>
#include <iostream>
#include <fstream>

using namespace cv;
using namespace std;

void loadExposureSeq(String, vector<Mat>&, vector<float>&);

int main(int argc, char**argv)
{
	//  CommandLineParser parser( argc, argv, "{@input | | Input directory that contains images and exposure times. }" );
	String imgpath = "./sourceimg";
	//! [Load images and exposure times]
	vector<Mat> images;
	vector<float> times;
	// loadExposureSeq(parser.get<String>( "@input" ), images, times);
	loadExposureSeq(imgpath, images, times);

	//! [Load images and exposure times]

	//! [Estimate camera response]
	Mat response;
	Ptr<CalibrateDebevec> calibrate = createCalibrateDebevec();
	calibrate->process(images, response, times);
	//! [Estimate camera response]

	//! [Make HDR image]
	Mat hdr;
	Ptr<MergeDebevec> merge_debevec = createMergeDebevec();
	merge_debevec->process(images, hdr, times, response);
	//! [Make HDR image]

	//! [Tonemap HDR image]
	Mat ldr;
	Ptr<Tonemap> tonemap = createTonemap(2.2f);
	tonemap->process(hdr, ldr);
	//! [Tonemap HDR image]

	//! [Perform exposure fusion]
	Mat fusion;
	Ptr<MergeMertens> merge_mertens = createMergeMertens();
	merge_mertens->process(images, fusion);
	//! [Perform exposure fusion]

	//! [Write results]
	imshow("1210 fusion", fusion );
	//imwrite("fusion.jpg", fusion * 255);
	imshow("1210 ldr", ldr );
	//imwrite("ldr.jpg", ldr * 255);
	//
	//imwrite("hdr.hdr", hdr);
	//! [Write results]
	waitKey(0);
	return 0;
}

void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times)
{
	path = path + "/";
	cout << path << endl;
	ifstream list_file((path + "list.txt").c_str());
	//cout << list_file<<endl;
	string name;
	float val;
	while (list_file >> name >> val) {
		cout << name << endl;
		Mat img = imread(path + name);
		images.push_back(img);
		times.push_back(1 / val);
	}
	list_file.close();
}

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值