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. 測試結果

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章