OpenCV,如何将参数传递给 cv2.TrackerMedianFlow_create 函数?
OpenCV, How to pass parameters into cv2.TrackerMedianFlow_create function?
我正在尝试使用带有 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
你能帮忙吗?
我在编译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 默认情况下,你没有办法改变参数,除非你修改源代码并重新编译它。
您可以通过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())
我正在尝试使用带有 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
你能帮忙吗?
我在编译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 默认情况下,你没有办法改变参数,除非你修改源代码并重新编译它。
您可以通过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())