//package com.xypower.mppreview; // //import static org.opencv.photo.Photo.createCalibrateDebevec; // //import org.opencv.android.OpenCVLoader; //import org.opencv.core.Core; //import org.opencv.core.CvType; //import org.opencv.core.Mat; //import org.opencv.core.MatOfFloat; //import org.opencv.core.Scalar; //import org.opencv.imgcodecs.Imgcodecs; //import org.opencv.photo.CalibrateDebevec; //import org.opencv.photo.Photo; // //import java.util.ArrayList; //import java.util.Arrays; //import java.util.List; // //public class HdrMergeExample { // // static { // if (!OpenCVLoader.initDebug()) { // // Handle initialization error // } // } // //// public Mat mergeHdrFrames(List frames) { //// Mat hdrImage = new Mat(); //// MatOfFloat response = new MatOfFloat(); //// //// // 假设frames是一个包含多个图像矩阵的列表 //// // 这里使用第一个图像作为基础,然后逐个调整其它图像的曝光 //// Mat baseFrame = frames.get(0); //// for (int i = 1; i < frames.size(); i++) { //// Mat frame = frames.get(i); //// ExposureCompensator.create(ExposureCompensator.GAIN).apply(i, baseFrame.clone(), frame, response); //// baseFrame.convertTo(baseFrame, -1, (float) Math.exp(-response.get(0, 0)), 0); //// frame.convertTo(frame, -1, 1, 0); //// Core.add(baseFrame, frame, baseFrame); //// } //// //// // 对结果进行归一化处理,显示时转换为8位 //// Core.normalize(baseFrame, hdrImage, 0, 255, Core.NORM_MINMAX, CvType.CV_8UC1); //// //// // 清理资源 //// response.release(); //// for (Mat frame : frames) { //// frame.release(); //// } //// //// return hdrImage; //// } // public Mat mergeHdrFrames(List hdrFrames, float gamma) { // // 假设所有帧尺寸相同 // Mat hdrImage = new Mat(); // Photo.createHdrMergeMertens(hdrFrames, hdrImage); // Photo.createMergeDebevec(hdrFrames, hdrImage); // // // 应用伽马校正(可选) // Core.pow(hdrImage, new Scalar(1d / gamma), hdrImage); // // // 归一化到[0, 255] // Core.normalize(hdrImage, hdrImage, 0, 255, Core.NORM_MINMAX, CvType.CV_8UC1); // // return hdrImage; // } // // 示例使用方法 // public void runHdrMerge(String[] imagePaths) { // List frames = new ArrayList<>(); // for (String imagePath : imagePaths) { // Mat frame = Imgcodecs.imread(imagePath, Imgcodecs.IMREAD_COLOR); // if (frame.empty()) { // // 图像加载失败处理 // } // frames.add(frame); // } // // Mat hdrImage = mergeHdrFrames(frames); // // // 保存或显示HDR图像 // Imgcodecs.imwrite("/path/to/save/hdr_image.jpg", hdrImage); // // // 清理资源 // hdrImage.release(); // } // // // public Mat mergeRawImages(Mat[] images) { // Mat mergedImage = new Mat(); // Core.merge(Arrays.asList(images), mergedImage); // return mergedImage; // } // // public Mat[] splitRawImages(Mat images) { // // // Obtain Camera Response Function (CRF) 提取相机响应函数 //// cout << "Calculating Camera Response Function (CRF) ... " << endl; // Mat responseDebevec; // CalibrateDebevec calibrateDebevec1 = createCalibrateDebevec(); // calibrateDebevec1.process(images, responseDebevec, times); // // // Mat[] channels = new Mat[3]; // Core.split(image, Arrays.asList(channels)); // return channels; // } // // public Mat applyHDR(Mat[] images) { // Mat hdrImage = new Mat(); // // 假设所有图片都已经预先调整到相同的曝光度 // // 这里可以根据实际情况调整曝光度 // for (Mat image : images) { // // 这里的1表示将图片增加相同的曝光度,0表示减少 // // 根据需要调整增加的曝光度的强度 // ExposureCompensator.apply(1, image, hdrImage); // } // return hdrImage; // } // // public void saveMergedImage(Mat mergedImage, String path) { // Imgcodecs.imwrite(path, mergedImage); // } // //}