【问题标题】:OpenCV, How to pass parameters into cv2.TrackerMedianFlow_create function?OpenCV,如何将参数传递给 cv2.TrackerMedianFlow_create 函数?
【发布时间】:2018-05-23 05:31:28
【问题描述】:

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

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

我所做的(并且有效):

tracker = cv2.TrackerMedianFlow_create()

我想做什么:

tracker = cv2.TrackerMedianFlow_create(maxLevel=3)

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

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

你能帮忙吗?

【问题讨论】:

  • 请注意,您链接的文档是 params 结构的构造函数。我没有3.3来测试怎么做,但是你需要实例化一个TrackeMedianFlowr::Params()对象,然后将那个对象传递给TrackerMedianFlow_create()。检查docs for TrackerMedianFlow() 以查看构造函数仅接受TrackerMedianFlow::Params() 对象。

标签: python-3.x opencv image-processing cv2 opencv3.3


【解决方案1】:

您可以通过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())

【讨论】:

    【解决方案2】:

    我在编译OpenCV 3.3 for Python 3.5时搜索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的参数,除非你修改了源代码并重新编译。

    【讨论】:

    • 谢谢。不幸的是,好像你说的那样。我会找到其他方法的。
    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2021-08-15
    • 2016-05-20
    相关资源
    最近更新 更多