【问题标题】:OpenCV Trackbar - show double value instead of intOpenCV Trackbar - 显示双精度值而不是 int
【发布时间】:2015-02-19 20:49:22
【问题描述】:

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

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

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    不,没有。不幸的是,trackbar 的实现方式(使用或不使用 Qt)不支持。

    【讨论】:

    • 您现在是否可以让轨迹栏停止显示任何值?
    • 恐怕也不可能。 trackbar 和 opencv_highgui 中的许多其他功能一样,在配置方面非常差。 OpenCV 的人在包括这些功能方面做得很好,但 OpenCV 并非旨在成为创建 UI 的工具包,甚至不是更简单的 UI。但是:看看 OpenCV 3.0.0(即将发布)。它包含了相当漂亮的 Matlab 式 UI 功能。
    【解决方案2】:

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

    【讨论】:

    • 我现在正在执行此操作,并且在图像 Mat 的一角显示当前值,但如果轨迹栏已经显示实际值会更舒适且不那么烦人价值。但不幸的是,正如 KeillRandor 上面所说,这是不可能的......
    【解决方案3】:

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

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

    【讨论】:

    • 段错误和崩溃
    猜你喜欢
    • 1970-01-01
    • 2014-07-13
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2017-04-22
    • 2017-02-24
    相关资源
    最近更新 更多