OpenCV:HDR提供错误的输出图像

时间:2019-01-24 17:19:48

标签: c++ opencv hdr

我一直在遵循有关如何在此site上实现HDR的示例

我正在尝试在Android的本机应用程序中实现代码,并在C ++中调用代码。代码如下:

JNIEXPORT jint JNICALL
Java_org_opencv_OpenCvJNI_processHdr(JNIEnv *env,
                                     jclass clazz,
                                     jlongArray inputImages,
                                     jfloatArray exposureTimes,
                                     jlong dst) {
    cv::Mat& output = *(cv::Mat*)dst;

    LOGD("HDR start");
    jsize count = env->GetArrayLength(inputImages);
    jlong *imagesArrayData = env->GetLongArrayElements(inputImages, 0);

    LOGD("HDR get mats");
    vector<cv::Mat> images(count);
    vector<float> times(count);

    for (int i = 0; i < count; i++) {
        cv::Mat& frame = *(cv::Mat*)imagesArrayData[0];
        images[i] = frame;
    }
    LOGD("HDR get times");
    env->GetFloatArrayRegion(exposureTimes, 0, count, &times[0]);

    LOGD("HDR merge");
    Mat hdr;
    Ptr<MergeDebevec> merge_debevec = createMergeDebevec();
    merge_debevec->process(images, hdr, times);

    LOGD("HDR tonemap");
    Mat ldr;
    Ptr<Tonemap> tonemapDrago = createTonemap(1.0);
    tonemapDrago->process(hdr, ldr);
    output = ldr * 255;

    LOGD("HDR save");

    cv::imwrite("/storage/emulated/0/opencv/example.png", output);
    return 0;
}

代码运行正常,并且传递给该方法的jlong​​Array和jfloatArray与示例具有相同的图像。但是,输出图像是如此明亮。第一张图片是我的输出,按照代码实验室的要求,输出了2º:

enter image description here image description

有人知道我会做错什么吗?之前我也尝试过对相机Response进行校准。但是,这样做花了很长时间,结果看起来更糟。

非常感谢您。

0 个答案:

没有答案