Я пытаюсь рассчитать производные оптического потока (как указано в моем предыдущем вопросе 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 являются пустыми массивами; velx — это матрица, а gxFilt и gFilt — это векторы одинаковой длины (я думаю, в данном случае 5). Есть мысли, почему возникает ошибка типа?
scipy.signal.seqfir2d
кажется довольно странным способом сделать это... Любая причина, по которой вы не можете использовать один из наиболее распространенных маршрутов, например.scipy.ndimage.gaussian_gradient_magnitude
и т. д.? - person Joe Kington   schedule 02.11.2011