1

オプティカル フローの導関数を計算しようとしています (以前の SO の質問で参照されているように)。計算を実行すると TypeError が発生します。

最初に OpenCV を使用してビデオを読み、そのオプティカル フロー メソッドを使用して速度を見つけました。次に、scipy.signal ライブラリを使用して、速度に対してガウス フィルターを実行し、導関数を計算します。

cv.CalcOpticalFlowLK(prev_frame, curr_frame, (11, 11), velx, vely)

# ... convert velx and vely to numpy arrays ...

# Set up the gaussian filter and its derivative.
sigmaBlur = 1
sigmaGrey = 4
gBlurSize = 2 * np.around(2.5 * sigmaBlur) + 1
x = np.mgrid[1:gBlurSize + 1] - np.around((gBlurSize + 1) / 2)
gFilt = np.exp(-(x ** 2) / (2 * (sigmaBlur ** 2)))
gFilt /= np.sum(gFilt)
gxFilt = (-x / (sigmaBlur ** 2)) * gFilt

# Now calculate the derivative of the velocity.
res = scipy.signal.sepfir2d(velx, gxFilt, gFilt)

# ... 3 more calls to sepfir2d ... #

残念ながら、sepfir2d の呼び出しで、次のエラーが発生します。

TypeError: array cannot be safely cast to required type

Scipy Web サイトのドキュメントは非常にまばらで、その使用例は他にあまり見つかりません。sepfir2d の 3 つの引数はすべて numpy 配列です。velx は行列で、gxFilt と gFilt はどちらも同じ長さのベクトルです (この場合は 5 だと思います)。型エラーが発生している理由はありますか?

4

1 に答える 1

1

多くのテストの後 (sepfir2d のソースを調べてもまったく役に立ちませんでした)、問題は、64 ビットである必要があるときに、32 ビットの浮動小数点プリミティブを使用しvelxていたという事実にあることがわかりました。velyそれはそれを修正しました。

于 2011-11-01T18:54:31.773 に答える