在python中设置openCV跟踪API的参数

Posted

技术标签:

【中文标题】在python中设置openCV跟踪API的参数【英文标题】:setting parameters of openCV tracking API in python 【发布时间】:2017-08-14 15:10:34 【问题描述】:

我正在尝试在 Python 中使用 openCV 跟踪 API 进行对象跟踪。我尝试了this link 中的代码,运行代码没有任何问题。但是,查看 openCV 文档here,我意识到每个跟踪算法都有参数。如何在 python 中设置这些参数?试图弄清楚这一点很难,但没有成功。

【问题讨论】:

这似乎不可能 - 请参阅 ***.com/questions/47723349/… 见***.com/a/52026745/5294258 【参考方案1】:

4 年后的更新,供任何可能仍在寻找的人使用。对于 3.x 左右的 opencv-python-contrib 版本,您可以使用 sturkmen 的答案 (from here)

tracker = cv2.TrackerCSRT_create()
tracker.save("default_csrt.xml") // saves default values of the Tracker
                                    you can rename default_csrt.xml-> custom_csrt.xml 
                                    and change values in it and use it load params

fs = cv2.FileStorage("custom_csrt.xml",cv2.FILE_STORAGE_READ)
fn = fs.getFirstTopLevelNode()
tracker.read(fn)

对于 opencv 4.x(我在 4.5,还没有检查更改发生的时间),大多数跟踪器都有一个 Tracker*_Params() 方法。如果您想查找可用的参数,您可以运行例如

list(filter(lambda x: x.find('__') < 0, dir(cv2.TrackerCSRT_Params)))

总之,如果你想在 Python opencv 中设置跟踪器的参数,你可以这样做(注意,我捏造了版本兼容性)

(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
def set_CSRT_Params():
    # Don't modify
    default_params = 
        'padding': 3.,
        'template_size': 200.,
        'gsl_sigma': 1.,
        'hog_orientations': 9.,
        'num_hog_channels_used': 18,
        'hog_clip': 2.0000000298023224e-01,
        'use_hog': 1,
        'use_color_names': 1,
        'use_gray': 1,
        'use_rgb': 0,
        'window_function': 'hann',
        'kaiser_alpha': 3.7500000000000000e+00,
        'cheb_attenuation': 45.,
        'filter_lr': 1.9999999552965164e-02,
        'admm_iterations': 4,
        'number_of_scales': 100,
        'scale_sigma_factor': 0.25,
        'scale_model_max_area': 512.,
        'scale_lr': 2.5000000372529030e-02,
        'scale_step': 1.02,
        'use_channel_weights': 1,
        'weights_lr': 1.9999999552965164e-02,
        'use_segmentation': 1,
        'histogram_bins': 16,
        'background_ratio': 2,
        'histogram_lr': 3.9999999105930328e-02,
        'psr_threshold': 3.5000000149011612e-02,
    
    # modify
    params = 
        'scale_lr': 0.5,
        'number_of_scales': 200
    
    params = **default_params, **params
    tracker = None
    if int(major_ver) == 3 and 3 <= int(minor_ver) <= 4:
        import json
        import os
        with open('tmp.json', 'w') as fid:
            json.dump(params, fid)
        fs_settings = cv2.FileStorage("tmp.json", cv2.FILE_STORAGE_READ)
        tracker = cv2.TrackerCSRT_create()
        tracker.read(fs_settings.root())
        os.remove('tmp.json')
    elif int(major_ver) >= 4:
        param_handler = cv2.TrackerCSRT_Params()
        for key, val in params.items():
            setattr(param_handler, key, val)
        tracker = cv2.TrackerCSRT_create(param_handler)
    else:
        print("Cannot set parameters, using defaults")
        tracker = cv2.TrackerCSRT_create()
    return tracker

【讨论】:

以上是关于在python中设置openCV跟踪API的参数的主要内容,如果未能解决你的问题,请参考以下文章

opencv简介以及环境搭建

如何在 OpenCV 中设置指向 Mat 变量内容的指针

如何在 C# api 中设置所需的参数

在BigQuery python api中设置聚类列

在 BigQuery python api 中设置聚类列

在 AFNetworking 2.x 中设置自定义标头后,RESTful API 未接收到参数