用 OpenCVSharp 4.5 跑一遍 OpenCV 官方教程。
原 OpenCV 官方教程链接: OpenCV: High Dynamic Range Imaging
测试图片可以从这里下载:github.com
using System;
using OpenCvSharp;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace ConsoleApp1
{
class tutorial59 : ITutorial
{
public void Run()
{
string[] imagesFiles = { "memorial0061.png", "memorial0062.png", "memorial0063.png", "memorial0064.png", "memorial0065.png", "memorial0066.png", "memorial0067.png", "memorial0068.png", "memorial0069.png", "memorial0070.png", "memorial0071.png", "memorial0072.png", "memorial0073.png", "memorial0074.png", "memorial0075.png", "memorial0076.png" };
float[] exposures = { 0.03125f, 0.0625f, 0.125f, 0.25f, 0.5f, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };
int num = imagesFiles.Length;
//读入图片
Mat[] images = new Mat[num];
for (int i = 0; i < num; i++)
{
string file = @"I:\csharp\images\hdr\"+imagesFiles[i];
images[i] = new Mat(file, ImreadModes.Color);
}
//估计相机响应
Mat response = new Mat();
CalibrateDebevec calibrate = CalibrateDebevec.Create();
calibrate.Process(images, response, exposures);
//生成HDR图片
Mat hdr = new Mat();
MergeDebevec merge_debevec = MergeDebevec.Create();
merge_debevec.Process(images, hdr, exposures, response);
//Tonemap
Mat ldr = new Mat();
Tonemap tonemap = Tonemap.Create(2.2f);
tonemap.Process(hdr, ldr);
Mat fusion = new Mat();
MergeMertens merge_mertens = MergeMertens.Create();
merge_mertens.Process(images, fusion);
Cv2.ImWrite("fusion.png", fusion * 255);
Cv2.ImWrite("ldr.png", ldr * 255);
Cv2.ImWrite("hdr.hdr", hdr);
}
}
}