

OpenCV3.0にあるHDR合成をiOSより利用と思い下記のサイトを参考にコーディングしました。

<http://docs.opencv.org/master/d3/db7/tutorial_hdr_imaging.html>

コードは下記の通りです。

[code]

    - (UIImage *)testHDR
    {
        cv::Mat images;
        cv::Mat1f times;
        //ここに画像を詰める
        cv::Mat srcMat1 = [self cvMatFromUIImage:[UIImage imageNamed:@"HDR1.JPG"]];
        cv::Mat srcMat2 = [self cvMatFromUIImage:[UIImage imageNamed:@"HDR2.JPG"]];
        cv::Mat srcMat3 = [self cvMatFromUIImage:[UIImage imageNamed:@"HDR3.JPG"]];
        images.push_back(srcMat1);
        images.push_back(srcMat2);
        images.push_back(srcMat3);
        //露光時間設定
        times.push_back(1/40);
        times.push_back(1/60);
        times.push_back(1/100);
    
        cv::Mat response;
        cv::Ptr<cv::CalibrateDebevec> calibrate = cv::createCalibrateDebevec();
        calibrate->process(images, response, times);
    
        cv::Mat hdr;
        cv::Ptr<cv::MergeDebevec> merge_debevec = cv::createMergeDebevec();
        merge_debevec->process(images, hdr, times, response);
    
        cv::Mat ldr;
        cv::Ptr<cv::TonemapDurand> tonemap = cv::createTonemapDurand();
        tonemap->process(hdr, ldr);
    
        cv::Mat fusion;
        cv::Ptr<cv::MergeMertens> merge_mertens = cv::createMergeMertens();
        merge_mertens->process(images, fusion);
    
        return [self UIImageFromCVMat:hdr];
    }
    
[/code]

そこで実際に動作させると`calibrate->process(images, response, times);`  
で落ちてしまいます。多分、imagesとtimesの画像と露光時間の値のセット仕方がよくないだと思うのですが、参考となるソースコードがなくて困っています。

どなたかアドバイスお願い致します。

追記  
下記のようなエラーが出力されます。

[code]

    OpenCV Error: Assertion failed (images.size() == times.total()) in process, file /Volumes/Linux/builds/precommit_ios/opencv/modules/photo/src/calibrate.cpp, line 70
    libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Volumes/Linux/builds/precommit_ios/opencv/modules/photo/src/calibrate.cpp:70: error: (-215) images.size() == times.total() in function process
    
[/code]


CC BY-SA 3.0
2015-07-26T10:02:40.547
12717
2015-07-30T01:17:26.593
2015-07-26T14:39:09.153
5343
5343
question
ios objective-c opencv
OpenCV3のHDR合成機能について


参考サイトのコードでは`times.push_back(int/float)`になっていて、提示のコードは`times.push_back(int/int)`になっているような気がします。

2015-07-27 追記  
また、imagesとtimesのそれぞれの変数の型が、参考サイトではそれらがstd::vectorとなっていてそのvectorの要素の型がcv::Matとfloatとなっています。  
OpenCV内のassertに引っかかっているのはこちらが原因かもしれません。


CC BY-SA 3.0
2015-07-26T14:07:24.990
12722
2015-07-30T01:17:26.593
2015-07-30T01:17:26.593
7283
7283
12717
answer