TypeError в scipy.signal.sepfir2d - PullRequest
       36

TypeError в scipy.signal.sepfir2d

1 голос
/ 01 ноября 2011

Я пытаюсь вычислить производные оптического потока (как указано в моем предыдущем 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 крайне скудна, и я не могу найти много других примеров ее использования.Все три аргумента для sepfir2d являются массивами numpy;velx - это матрица, а gxFilt и gFilt - это векторы одинаковой длины (думаю, в данном случае 5). Есть мысли, почему происходит ошибка типа?

1 Ответ

1 голос
/ 01 ноября 2011

После длительного тестирования (поиск источника sepfir2d вообще не помог) оказалось, что проблема заключалась в том, что мои velx и vely использовали 32-битные примитивы с плавающей точкой, когда должен был быть 64-битным. Это исправило это.

...