2011-11-01 30 views
1

我試圖計算光流的衍生物(如標號in my previous SO question),並在執行計算時遇到TypeError。TypeError in scipy.signal.sepfir2d

我首先使用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 

documentation on the Scipy website極爲稀疏,我找不到它的使用的許多其他例子。 sepfir2d的所有三個參數都是numpy數組; velx是一個矩陣,gxFilt和gFilt都是相同長度的矢量(在這種情況下,我認爲是5)。 任何想法爲什麼類型錯誤正在發生?

+1

對於什麼值得'scipy.signal.seqfir2d'似乎是一個相當奇怪的方式來做到這一點...任何原因,你不能使用一個更常見的路線,例如'scipy.ndimage.gaussian_gradient_magnitude'等? –

+0

我實際上是在辯論這個問題,但是如果這是我所需要的,我無法從文檔中知道。它是否和我上面寫的代碼一樣? (我對光流舞臺相當陌生,所以請隨意解釋爲你喜歡的細節) – Magsol

回答

1

多的測試之後(查看源爲sepfir2d沒有幫助的話),原來的問題是事實,我velxvely採用32位浮點元,當他們需要是64位。這解決了它。