我正在尝试用OpenCV3.3创建MEDIANFLOW跟踪器,使用的是opencv-python和Python3.6。根据OpenCV docs的这个页面,我需要向构造函数传递一些参数。
问题是我不知道如何正确地将可用的参数传递给这个函数?我找不到任何关于它的信息。
我所做的(它是有效的):
tracker = cv2.TrackerMedianFlow_create()我想做的是:
tracker = cv2.TrackerMedianFlow_create(maxLevel=3)但它不工作,并给我一个错误:
SystemError: <built-in function TrackerMedianFlow_create> returned NULL without setting an error你能帮忙吗?
发布于 2017-12-09 13:53:16
在为Python3.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包装器的参数,除非您修改了源代码并重新编译。
发布于 2019-02-11 19:35:09
您可以通过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())https://stackoverflow.com/questions/47723349
复制相似问题