Как исправить импорт opencv для алгоритма оптического потока TVL1

Я задаю вам очень простой вопрос. Я хочу использовать функцию TVL1 для вычисления оптического потока с помощью openCV (и python). Но вот что я получаю:

AttributeError: 'module' object has no attribute 'DualTVL1OpticalFlow_create'

Traceback (most recent call last):

File "opticalFlowModel.py", line 50, in computeOpticalFlow
optical_flow = cv2.DualTVL1OpticalFlow_create()

AttributeError: 'module' object has no attribute 'DualTVL1OpticalFlow_create'

Проблема в том, что в этой теме Как вычислить оптический поток с помощью tvl1 opencv , похоже, они используют один и тот же код. Я также пробую этот код: Алгоритм ускорения оптического потока (если применимо ) Python OpenCV и имеют тот же результат.

Вот весь мой импорт:

import cv2
import numpy as np
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4 import QtCore, QtGui

Я использую OpenCV 4.0.1


person Alexy    schedule 01.04.2019    source источник
comment
pip установить opencv-contrib-python   -  person Nuzhny    schedule 01.04.2019
comment
Я уже установил opencv с дополнительными модулями   -  person Alexy    schedule 01.04.2019


Ответы (1)


Я нашел решение здесь.

Способ вызова функции отличается от последней версии openCV. Вот что делать:

Заменять

optical_flow = cv2.DualTVL1OpticalFlow_create()

by

optical_flow = cv2.optflow.DualTVL1OpticalFlow_create()
person Alexy    schedule 01.04.2019
comment
оптический_поток = cv2.optflow.DualTVL1OpticalFlow_create().calc(prvs,следующий,нет) - person sjcoding; 16.05.2019
comment
@sjcoding Я бы не рекомендовал это, потому что каждый раз, когда вы будете вычислять оптический поток, это создаст новый экземпляр DualTVL1OpticalFlow. Необходимо использовать Optical_flow = cv2.optflow.DualTVL1OpticalFlow_create(), а затем current_opt_flow = Optical_flow.calc(prvs, next, None) для каждого нового оптического потока. - person Alexy; 17.05.2019