Я пытаюсь использовать openCV 3 на iOS для создания HDR-изображения из нескольких экспозиций, которые в конечном итоге будут выводиться как EXR-файл. Я заметил, что получаю искаженный вывод, когда пытался создать HDR-образ. Думая, что это была ошибка при попытке создать ответ камеры, я начал с нуля и адаптировал материал для создания изображений HDR на openCV для iOS, но он дает похожие результаты. Следующий C++ код возвращает искаженное изображение:Изображение с высоким динамическим диапазоном с использованием openCV на iOS производит искаженный вывод
cv::Mat mergeToHDR (vector<Mat>& images, vector<float>& times)
{
imgs = images;
Mat response;
//Ptr<CalibrateDebevec> calibrate = createCalibrateDebevec();
//calibrate->process(images, response, times);
Ptr<CalibrateRobertson> calibrate = createCalibrateRobertson();
calibrate->process(images, response, times);
// create HDR
Mat hdr;
Ptr<MergeDebevec> merge_debevec = createMergeDebevec();
merge_debevec->process(images, hdr, times, response);
// create LDR
Mat ldr;
Ptr<TonemapDurand> tonemap = createTonemapDurand(2.2f);
tonemap->process(hdr, ldr);
// create fusion
Mat fusion;
Ptr<MergeMertens> merge_mertens = createMergeMertens();
merge_mertens->process(images, fusion);
/*
Uncomment what kind of tonemapped image or hdr to return
Returning one of the images in the array produces ungarbled output
so we know the problem is unlikely with the openCV to UIImage conversion
*/
//give back one of the images from the image array
//return images[0];
//give back one of the hdr images
return fusion * 255;
//return ldr * 255;
//return hdr
}
Это то, что изображение выглядит следующим образом:
Я проанализировал изображение, пробовал различные преобразования цветового пространства, но появляются данные быть мусором.
Основой openCV является последняя скомпилированная версия 3.0.0 с сайта openCV.org. RC и alpha дают одинаковые результаты, а текущая версия не будет построена (для iOS или OSX). Я думал, что мои последующие шаги состоят в том, чтобы попытаться скомпилировать фреймворк с нуля или получить пример, работающий под другой платформой, чтобы узнать, является ли проблема специфичной для платформы или с самими функциями OpenCV HDR. Но прежде чем я это сделаю, я подумал, что я бы бросил проблему на переполнение стека, чтобы увидеть, столкнулся ли кто-нибудь с одной и той же проблемой, или если я пропущу что-то ослепительно очевидное.
Я загрузил Xcode проект примера сюда:
https://github.com/artandmath/openCVHDRSwiftExample
Получения OpenCV для работы с быстрым был с помощью пользовательских литейного на Github
Я могу подтвердить, что образец кода отлично работает под OSX, в то время как ваша версия проекта не отключает iOS. Это немного сужает проблему. – foundry
исправление для комментариев - код работает одинаково на OSX, но с помощью imshow() форматы преобразования корректно.На iOS, проходящем через оболочку, есть проблема с преобразованием формата ... – foundry
Спасибо @foundry. Я восстановил структуру, чтобы быть уверенным, и столкнулся с той же проблемой. Снова перейдя через UIImage + OpenCV, initWithCVMat ожидает жестко закодированный 8-битный канал на пиксель, поэтому я думаю, что проблема может быть исправлена здесь, или я могу преобразовать изображение в 8-бит в openCV, прежде чем передать его UIKit. – Artandmath