iOSでopenCV 3を使用して、最終的にEXRファイルとして出力される複数の露出からHDR画像を生成しようとしています。HDR 画像を作成しようとすると、出力が文字化けしていることに気付きました。カメラのレスポンスを作ろうとしたのは間違いだったと思い、ゼロから始めて、openCV の HDR イメージングのチュートリアル資料を iOS に適応させましたが、同様の結果が得られます。次の C++ コードは、文字化けした画像を返します。
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 フレームワークは、openCV.org Web サイトから入手した最新のコンパイル済み 3.0.0 バージョンです。RC とアルファは同じ結果を生成し、現在のバージョンはビルドされません (iOS または OSX の場合)。私の次のステップは、フレームワークをゼロからコンパイルするか、別のプラットフォームでサンプルを動作させて、問題がプラットフォーム固有のものなのか、openCV HDR 関数自体にあるのかを確認することだと考えていました。しかし、それを行う前に、誰かが同じ問題に遭遇したかどうか、または盲目的に明らかな何かを見逃していないかどうかを確認するために、スタックオーバーフローで問題を投げ出すと思いました。
サンプルの xcode プロジェクトをここにアップロードしました。
https://github.com/artandmath/openCVHDRSwiftExample
openCV を迅速に動作させるには、Github のユーザー ファウンドリーの助けが必要でした。