是否可以删除OpenCV中的轨迹栏?

时间:2014-12-28 19:56:57

标签: c++ opencv trackbar

我想创建一个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;
 }

1 个答案:

答案 0 :(得分:3)

无法破坏您在openCV中创建的轨迹栏。并且没有办法只显示给定的跟踪栏。

创建轨迹栏后,它将按照您在其中放置它们的窗口底部的创建顺序显示。

也许你可以通过致电来管理:

destroyWindow(winname);
namedWindow(winname, FLAGS);
createTrackbar(trackname, winname, &pos, maxBound, callBack);
imshow(winname, img);

每次您需要删除并创建新的轨迹栏。它会破坏窗户和附着在其上的轨道栏。然后使用新的轨迹栏创建一个新窗口。

希望这会有所帮助。

祝你好运