OpenCV轨迹栏-显示双值而不是int
OpenCV Trackbar - show double value instead of int
我在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);
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- 长 长 int 不要 长 int 好
- C++程序在循环后给出奇怪的int值
- 如何计算数据类型的范围,例如int
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- OpenCV轨迹栏-显示双值而不是int