OpenCV, как передать параметры в функцию cv2.TrackerMedianFlow_create?

Я пытаюсь создать трекер MEDIANFLOW с OpenCV3.3, используя opencv-python с Python3.6. Мне нужно передать некоторые аргументы в конструктор в соответствии с этой страницей документации OpenCV.

Проблема в том, что я не знаю, как правильно передать доступные аргументы в эту функцию? Я не смог найти никакой информации об этом.

Что я делаю (и это работает):

tracker = cv2.TrackerMedianFlow_create()

Что я хочу сделать:

tracker = cv2.TrackerMedianFlow_create(maxLevel=3)

Но это не работает и выдает ошибку:

SystemError: <built-in function TrackerMedianFlow_create> returned NULL without setting an error

Не могли бы вы помочь?

1 ответ

Решение

Я ищу промежуточный код, сгенерированный cmake/make при компиляции OpenCV 3.3 для Python 3.5, просто не могу найти методы для установки параметров для cv2.TrackerXXX,

В modules/python3/pyopencv_generated_funcs.hЯ нахожу эту функцию:

static PyObject* pyopencv_cv_TrackerMedianFlow_create(PyObject* , PyObject* args, PyObject* kw)
{
    using namespace cv;

    Ptr<TrackerMedianFlow> retval;

    if(PyObject_Size(args) == 0 && (kw == NULL || PyObject_Size(kw) == 0))
    {
        ERRWRAP2(retval = cv::TrackerMedianFlow::create());
        return pyopencv_from(retval);
    }

    return NULL;
}

Это означает, что вы не можете передать какой-либо параметр cv::TrackerMedianFlow_create(),

В modules/python3/pyopencv_generated_types.hЯ нахожу это:

static PyGetSetDef pyopencv_TrackerMedianFlow_getseters[] =
{
    {NULL}  /* Sentinel */
};

Это означает, что у вас нет возможности изменить параметры оболочки Python по умолчанию, если только вы не изменили исходный код и не перекомпилировали его.

Вы можете настроить параметры Tracker через интерфейс FileStorage.

import cv2

# write
tracker = cv2.TrackerMedianFlow_create()
tracker.save('params.json')

# write (another way)
fs = cv2.FileStorage("params.json", cv2.FileStorage_WRITE)
tracker.write(fs)
fs.release()

# read
tracker2 = cv2.TrackerMedianFlow_create()
fs = cv2.FileStorage("params.json", cv2.FileStorage_READ)
tracker2.read(fs.getFirstTopLevelNode())
Другие вопросы по тегам