

win_sizeの値を16以上にすると

[code]

    OpenCV Error: Assertion failed ((icvCalcOpticalFlowLK_8u32fR( (uchar*)srcA->data.ptr,
        (uchar*)srcB->data.ptr, srcA->step, cvGetMatSize( srcA ), winSize,
            velx->data.fl, vely->data.fl, velx->step )) >= 0) in cvCalcOpticalFlowLK,
                file C:\builds\2_4_PackSlave-win32-vc12-shared\opencv\modules\legacy\src\optflowlk.cpp,
                    line 596
    
[/code]

このようなエラーがでてしまいます。  
おそらく

[code]

    C:\builds\2_4_PackSlave-win32-vc12hared\opencv\modules\legacy\src\optflowlk.cpp
    
[/code]

の中の596行目で窓サイズの最大値が決められているようでこの中を書き換えればいいらしいですが、`C:\builds`というフォルダがそもそもみつからず、お手上げです。  
どうかお助けください；；

いろいろ調べてみて解決しました。  
どうやら疎なオプティカルフローを計算するには、PyrLKの方を使うといいみたいですね。  
回答いただきありがとうございました。


CC BY-SA 3.0
2015-09-28T15:30:52.703
17036
2016-06-20T18:10:36.873
2015-09-29T03:09:11.077
12478
12478
question
opencv
OpenCVのオプティカルフロー算出にLK法を使っているのですが


問題の
[optflowlk.cpp:icvCalcOpticalFlowLK_8u32fR()](https://github.com/kipr/opencv/blob/master/modules/legacy/src/optflowlk.cpp#L83)
を見てみますと、以下の様になっています。

[code]

    static CvStatus CV_STDCALL
    icvCalcOpticalFlowLK_8u32fR( uchar * imgA,
                                 uchar * imgB,
                                 int imgStep,
                                 CvSize imgSize,
                                 CvSize winSize,
                                 float *velocityX,
                                 float *velocityY, int velStep )
                 :
    
    int winWidth = winSize.width;
    int winHeight = winSize.height;
                 :
    
    if( imageHeight < winHeight )
        return CV_BADSIZE_ERR;
    if( imageWidth < winWidth )
        return CV_BADSIZE_ERR;
    
    if( winHeight >= 16 )
        return CV_BADSIZE_ERR;
    if( winWidth >= 16 )
        return CV_BADSIZE_ERR;
    
    if( !(winHeight & 1) )
        return CV_BADSIZE_ERR;
    if( !(winWidth & 1) )
        return CV_BADSIZE_ERR;
    
[/code]

Window size に問題があるとすれば、以下の場合にエラーが返される事になります(assertion failed)。

  * Window size(幅・高さ)が画像サイズのそれより大きい
  * Window size(幅・高さ)が 16 pixcel 以上
  * Window size(幅・高さ)が偶数値

Window size を 16 pixcel 未満(の奇数値)に制限しているのは、それなりの理由があってのことかと思われます。仮にこの制限を変更して
OpenCV を再ビルドしたとしても、この先の処理でエラーになるか、エラーにならなくとも意味のない処理結果が返されるだけではないでしょうか。


CC BY-SA 3.0
2015-09-28T16:25:10.960
17037
2015-09-28T16:37:50.610
2015-09-28T16:37:50.610
17036
answer