2

我正在尝试使用带有 Python3.6 的 opencv-python 创建带有 OpenCV3.3 的 MEDIANFLOW 跟踪器。我需要根据这个 OpenCV文档页面将一些参数传递给构造函数。

问题是我不知道如何正确地将可用参数传递给这个函数?我无法找到有关它的任何信息。

我做什么(并且有效):

tracker = cv2.TrackerMedianFlow_create()

我想做的事:

tracker = cv2.TrackerMedianFlow_create(maxLevel=3)

但它不起作用并给我一个错误:

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

你能帮忙吗?

4

2 回答 2

4

您可以通过 FileStorage 接口自定义 Tracker 参数。

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())
于 2019-02-11T11:35:09.483 回答
3

我在为 Python 3.5 编译 OpenCV 3.3 时搜索 cmake/make 生成的中间代码,只是找不到为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 wrapper 的参数,除非您修改了源代码并重新编译它。

于 2017-12-09T05:53:15.537 回答