Path: blob/master/samples/java/tutorial_code/photo/hdr_imaging/HDRImagingDemo.java
16354 views
import java.io.IOException;1import java.nio.file.Files;2import java.nio.file.Paths;3import java.util.ArrayList;4import java.util.List;56import org.opencv.core.Core;7import org.opencv.core.CvType;8import org.opencv.core.Mat;9import org.opencv.core.Scalar;10import org.opencv.imgcodecs.Imgcodecs;11import org.opencv.photo.CalibrateDebevec;12import org.opencv.photo.MergeDebevec;13import org.opencv.photo.MergeMertens;14import org.opencv.photo.Photo;15import org.opencv.photo.TonemapDurand;1617class HDRImaging {18public void loadExposureSeq(String path, List<Mat> images, List<Float> times) {19path += "/";2021List<String> lines;22try {23lines = Files.readAllLines(Paths.get(path + "list.txt"));2425for (String line : lines) {26String[] splitStr = line.split("\\s+");27if (splitStr.length == 2) {28String name = splitStr[0];29Mat img = Imgcodecs.imread(path + name);30images.add(img);31float val = Float.parseFloat(splitStr[1]);32times.add(1/ val);33}34}35} catch (IOException e) {36e.printStackTrace();37}38}3940public void run(String[] args) {41String path = args.length > 0 ? args[0] : "";42if (path.isEmpty()) {43System.out.println("Path is empty. Use the directory that contains images and exposure times.");44System.exit(0);45}4647//! [Load images and exposure times]48List<Mat> images = new ArrayList<>();49List<Float> times = new ArrayList<>();50loadExposureSeq(path, images, times);51//! [Load images and exposure times]5253//! [Estimate camera response]54Mat response = new Mat();55CalibrateDebevec calibrate = Photo.createCalibrateDebevec();56Mat matTimes = new Mat(times.size(), 1, CvType.CV_32F);57float[] arrayTimes = new float[(int) (matTimes.total()*matTimes.channels())];58for (int i = 0; i < times.size(); i++) {59arrayTimes[i] = times.get(i);60}61matTimes.put(0, 0, arrayTimes);62calibrate.process(images, response, matTimes);63//! [Estimate camera response]6465//! [Make HDR image]66Mat hdr = new Mat();67MergeDebevec mergeDebevec = Photo.createMergeDebevec();68mergeDebevec.process(images, hdr, matTimes);69//! [Make HDR image]7071//! [Tonemap HDR image]72Mat ldr = new Mat();73TonemapDurand tonemap = Photo.createTonemapDurand(2.2f, 4.0f, 1.0f, 2.0f, 2.0f);74tonemap.process(hdr, ldr);75//! [Tonemap HDR image]7677//! [Perform exposure fusion]78Mat fusion = new Mat();79MergeMertens mergeMertens = Photo.createMergeMertens();80mergeMertens.process(images, fusion);81//! [Perform exposure fusion]8283//! [Write results]84Core.multiply(fusion, new Scalar(255,255,255), fusion);85Core.multiply(ldr, new Scalar(255,255,255), ldr);86Imgcodecs.imwrite("fusion.png", fusion);87Imgcodecs.imwrite("ldr.png", ldr);88Imgcodecs.imwrite("hdr.hdr", hdr);89//! [Write results]9091System.exit(0);92}93}9495public class HDRImagingDemo {96public static void main(String[] args) {97// Load the native OpenCV library98System.loadLibrary(Core.NATIVE_LIBRARY_NAME);99100new HDRImaging().run(args);101}102}103104105