OpenCV: HDR дает неправильное изображение на выходе

Я следовал примеру о том, как реализовать 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;
}

Код работает нормально, а jlongArray и jfloatArray, переданные методу, представляют собой те же изображения, что и в примере. Тем не менее, выходное изображение очень яркое. Первое изображение - мой вывод, 2º один ожидаемый выход после того, как следовать кодовой лаборатории:

Описание изображения

Кто-то знает, что я могу делать не так? Я попытался также сделать калибровку для отклика камеры раньше. Но на это ушли годы, и результат выглядит еще хуже.

Огромное спасибо заранее.

0 ответов

Другие вопросы по тегам