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, ×[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º один ожидаемый выход после того, как следовать кодовой лаборатории:
Кто-то знает, что я могу делать не так? Я попытался также сделать калибровку для отклика камеры раньше. Но на это ушли годы, и результат выглядит еще хуже.
Огромное спасибо заранее.