|
|
//package com.xypower.camera2raw;
|
|
|
//
|
|
|
//import android.hardware.camera2.params.TonemapCurve;
|
|
|
//
|
|
|
//import org.opencv.android.OpenCVLoader;
|
|
|
//import org.opencv.core.Core;
|
|
|
//import org.opencv.core.Mat;
|
|
|
//import org.opencv.imgcodecs.Imgcodecs;
|
|
|
//import org.opencv.photo.MergeDebevec;
|
|
|
//import org.opencv.photo.Photo;
|
|
|
//import org.opencv.photo.Tonemap;
|
|
|
//import org.opencv.photo.MergeExposures;
|
|
|
//
|
|
|
//public class HdrMergeExample {
|
|
|
//
|
|
|
// static {
|
|
|
// if (!OpenCVLoader.initDebug()) {
|
|
|
// // Handle initialization error
|
|
|
// }
|
|
|
// }
|
|
|
//
|
|
|
//// public Mat createHdrImage(Mat[] mats) {
|
|
|
//// Mat hdrImage = new Mat();
|
|
|
//// Exposure.createHDRmergeMertens(mats, hdrImage);
|
|
|
//// return hdrImage;
|
|
|
//// }
|
|
|
////
|
|
|
//// public void saveHdrImage(Mat hdrImage, String filePath) {
|
|
|
//// Imgcodecs.imwrite(filePath, hdrImage);
|
|
|
//// }
|
|
|
////
|
|
|
//// // 使用示例
|
|
|
//// public void processHdr() {
|
|
|
//// // 假设你有一个Mat数组,包含了多张需要合成HDR的图片
|
|
|
//// Mat[] images = ...;
|
|
|
////
|
|
|
//// Mat hdrImage = createHdrImage(images);
|
|
|
////
|
|
|
//// // 保存HDR图片到设备存储
|
|
|
//// saveHdrImage(hdrImage, "/path/to/save/hdrImage.jpg");
|
|
|
////
|
|
|
//// // 释放资源
|
|
|
//// hdrImage.release();
|
|
|
//// for (Mat mat : images) {
|
|
|
//// mat.release();
|
|
|
//// }
|
|
|
//// }
|
|
|
//
|
|
|
// public Mat sdrToHdr(String inputPaths) {
|
|
|
// Mat image = Imgcodecs.imread(inputPaths);
|
|
|
// Mat hdr = new Mat();
|
|
|
// MergeDebevec mergeDebevec = Photo.createMergeDebevec();
|
|
|
// mergeDebevec.process(image, hdr, image.ge);
|
|
|
//
|
|
|
// }
|
|
|
//
|
|
|
// public Mat mergeHdrImages(Mat[] hdrImages) {
|
|
|
// Mat mergedImage = new Mat();
|
|
|
// Core.merge(hdrImages, mergedImage);
|
|
|
// return mergedImage;
|
|
|
// }
|
|
|
//
|
|
|
// public Mat toneMap(Mat hdrImage) {
|
|
|
// Mat ldrImage = new Mat();
|
|
|
// TonemapCurve.CHANNEL_BLUE(2); // Use the Gamma Tone Mapping
|
|
|
// Tonemap.process(hdrImage, ldrImage);
|
|
|
// return ldrImage;
|
|
|
// }
|
|
|
//
|
|
|
// public void saveMergedImage(Mat mergedImage, String filePath) {
|
|
|
// boolean result = Imgcodecs.imwrite(filePath, mergedImage);
|
|
|
// if (result) {
|
|
|
// // Image saved successfully
|
|
|
// } else {
|
|
|
// // Handle save error
|
|
|
// }
|
|
|
// }
|
|
|
//
|
|
|
// // Example usage
|
|
|
// public void mergeHdrAndSave(String[] inputPaths, String outputPath) {
|
|
|
// Mat[] hdrImages = new Mat[inputPaths.length];
|
|
|
// for (int i = 0; i < inputPaths.length; i++) {
|
|
|
// hdrImages[i] = Imgcodecs.imread(inputPaths[i]);
|
|
|
// }
|
|
|
//
|
|
|
// Mat mergedImage = mergeHdrImages(hdrImages);
|
|
|
// Mat ldrImage = toneMap(mergedImage);
|
|
|
//
|
|
|
// saveMergedImage(ldrImage, outputPath);
|
|
|
//
|
|
|
// // Release the images to avoid memory leaks
|
|
|
// for (Mat image : hdrImages) {
|
|
|
// image.release();
|
|
|
// }
|
|
|
// mergedImage.release();
|
|
|
// ldrImage.release();
|
|
|
// }
|
|
|
//}
|