我想制作一个MENU跟踪栏,该菜单栏可以更改用户想要更改的参数。因此,如果将其设置为“1”,则会出现BLUR跟踪栏,并且可以使图片模糊;如果将其设置为“2”,则可以显示ALPHA和BETA跟踪栏,并且可以更改亮度和对比度,但是BLUR跟踪栏仍然可见,并且可以将模糊更改为好吧,我希望仅在MENU跟踪栏的值为1时才能看到它。我尝试使用'if','switch'甚至'while'来实现,但它们不起作用。可以在完全状况下擦除其他轨迹栏,但是我还没有找到执行此功能的功能。或有什么想法只显示精确的跟踪栏?
这是代码(.cpp)的一部分:
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
const int slider_max = 100, slider2_max = 100, slider3_max = 100, slider5_max = 2;
int slider = 0, slider2 = 0, slider3 = 0, slider5 = 0;
(...)
void transf(int, void*)
{
(...)
if (slider5 == 0)
{
setTrackbarPos(ALPHA, name3, 0);
setTrackbarPos(BETA, name3, 0);
setTrackbarPos(BLUR, name3, 0);
imshow(name, before);
}
if (slider5 == 1)
{
setTrackbarPos(ALPHA, name3, 0);
setTrackbarPos(BETA, name3, 0);
createTrackbar(BLUR, name3, &slider, slider_max, blur);
blur(0,0);
}
if (slider5 == 2)
{
setTrackbarPos(BLUR, name3, 0);
createTrackbar(ALPHA, name3, &slider2, slider2_max+100, contrBright);
createTrackbar(BETA, name3, &slider3, slider3_max, contrBright);
contrBright(0,0);
}
}
int main()
{
(...)
createTrackbar(MENU, name, &slider5, slider5_max, transf);
transf(0,0);
waitKey(0);
return 0;
}
最佳答案
还没有办法破坏您在openCV中创建的轨迹栏。而且没有办法只显示给定的跟踪栏。
创建跟踪栏后,它将按创建顺序显示在放置它们的窗口的底部。
也许您可以通过以下方式进行管理:
destroyWindow(winname);
namedWindow(winname, FLAGS);
createTrackbar(trackname, winname, &pos, maxBound, callBack);
imshow(winname, img);
每次需要删除和创建新的跟踪栏时。它将破坏窗口和附加在其上的轨迹栏。然后使用新的轨迹栏创建一个新窗口。
希望这会有所帮助。
祝好运
关于c++ - 是否可以在OpenCV中删除跟踪栏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27680074/