C++OpenCV学习入门(3):滑动条的创建及使用


滑动条(Trackbar)是OpenCV动态调节参数特别好用的一种工具。

1. createTrackbar:用于创建一个可以调节整数值的滑动条

int createTrackbar(const String& trackbarname, const String& winname,
                              int* value, int count,
                              TrackbarCallback onChange = 0,
                              void* userdata = 0);

参数1:轨迹条的名字,用来代表创建的轨迹条;
参数2:窗口的名字,表示这个轨迹条会依附在哪个窗口上;
参数3:一个指向整型的指针,表示滑块的位置;
参数4:表示滑块可以达到的最大值的位置,滑块的最小值始终为0;
参数5:这是一个指向回调函数的指针,默认值为0,每次滑块位置改变时,这个函数都会进行回调。函数原型为void XXXX(int, void*)
参数6void*类型的userdata,默认值也为0,是用户回传给回调函数的数据,用来处理轨迹条事件,如果使用的第三个参数value实参是全局变量的话,完全可以不用管这个userdata参数。

2. 测试示例

#include "opencvpro/cvtpro.h" //头文件所在位置

#define WINDOW_NAME "[线性混合示例]"
#define  G_NMAXALPHAVALUE 100  //Alpha的最大值

int      g_nAlphaValueSlide;   //滑动条对应的变量
double   g_dAlphaValue;
double   g_dBetaValue;

//声明存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;

void on_Trackbar(int, void*)
{
    g_dAlphaValue = (double)g_nAlphaValueSlide / G_NMAXALPHAVALUE;
    g_dBetaValue = 1.0 - g_dAlphaValue;

    //根据alpha和beta值进行线性混合
    addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);

    imshow(WINDOW_NAME, g_dstImage);
}

int main()
{
    g_srcImage1 = imread("1.png");
    g_srcImage2 = imread("2.png");

    if (!g_srcImage1.data)
        cout << "read pic1 error." << endl;
    if (!g_srcImage2.data)
        cout << "read pic2 error." << endl;

    g_nAlphaValueSlide = 70;
    namedWindow(WINDOW_NAME, 1);

    string TrackbarName;
    TrackbarName = "透明度" + to_string(G_NMAXALPHAVALUE);
    
    createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlide,
        G_NMAXALPHAVALUE, on_Trackbar);

    on_Trackbar(g_nAlphaValueSlide, 0);

    waitKey(0);
}

3. 测试结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了88 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/WHEgqing/article/details/104823178