OpenCV Trackbar - 显示double值而不是int

时间:2014-04-25 10:09:41

标签: c++ opencv

我在openCV中使用createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0)来获取输入值,该值必须是介于0和1之间的两倍。我可以轻松地从轨迹栏位置计算所需的值,但显然GUI只显示滑块的int值,这有点刺激。

有没有办法更改轨迹栏显示的值?我在文档或教程中找不到任何相关信息......

3 个答案:

答案 0 :(得分:3)

不,没有。不幸的是,轨道栏的实现方式(有或没有Qt)它不支持。

答案 1 :(得分:0)

AFAIK没有可能传递双倍或其他浮点值,但如果你还好,让我们用0.001精度说你可以创建一个最大值为1000的轨迹栏,然后简单地将其值视为双重值将轨迹栏值除以最大值为0和1。

答案 2 :(得分:0)

如前所述,这是不可能的。 这是一个小包装器,可以方便地为您计算双值:

class DoubleTrack{
public:

    int int_value = 0;
    double precision;
    void(*user_callback)(double);

    void setup(const std::string& field_name, const std::string& window_name, void(*function)(double), double max_value, double default_value = 0, unsigned precision = 100){
            int_value = default_value * precision;
            createTrackbar(field_name, window_name, &int_value, max_value * precision, DoubleTrack::callback, this);
            user_callback = function;
            this->precision = precision;
    }

    static void callback(int, void* object){
        DoubleTrack* pObject = static_cast<DoubleTrack*>(object);
        pObject->user_callback(pObject->int_value / pObject->precision);
    }

};

static void test(double value){
    std::cout << value << std::endl;
}

DoubleTrack().setup("field_name", "window_name", test, 4.5);