OpenCV轨迹栏-显示双值而不是int

OpenCV Trackbar - show double value instead of int

本文关键字:int 轨迹 显示 OpenCV      更新时间:2023-10-16

我在openCV中使用createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0)来获得一个输入值,它需要是介于0和1之间的双精度。我可以很容易地从轨迹条的位置计算出所需的值,但显然GUI只显示滑块的int值,这有点烦人。

有什么方法可以更改轨迹栏显示的值吗?我在文档或教程中找不到任何关于这方面的信息。。。

不,没有不幸的是,轨迹条的实现方式(无论是否使用Qt)都不支持这一点。

AFAIK不可能传递双精度或其他浮点值,但如果您可以,假设精度为0.001,您可以创建一个最大值为1000的轨迹条,然后通过将轨迹条值除以最大值,将其值视为0和1之间的双精度。

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

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);