滑動條 Trackbar[OpenCV 筆記9]


OpenCV中沒有實現按鈕的功能,我們可以利用滑動條來實現按鈕功能。

int createTrackerbar(const string& trackerbarname, const string winame, int* value, int count, 
TrackbarCallback onChange=0, void* userdata=0);

trackbarname

軌跡條的名字。

winname

窗口的名字,軌跡條會依附在這個窗口上。

value

一個指向整型的指針,表示滑塊的位置,在創建時,滑塊的初始位置就是該變量當前的值。

count

滑塊可以達到的最大位置的值。滑塊最小位置的值始終為0。

onchange

指向回調函數的指針,每次滑塊位置改變時,這個函數都會進行回調。並且這個函數的原型必須為void XXXX(int,void*);其中第一個參數是軌跡條的位置,第二個參數是用戶數據(本函數中參數userdata)。如果回調函數是NULL指針,則表示沒有回調函數的調用,僅參數value有變化。

userdata

用戶傳給回調函數的數據,用來處理軌跡條事件。如果使用的value實參是全局變量,可以不去管userdata參數。

int getTrackbarPos(const string& trackbarname, const string& winname );

trackbarname

軌跡條的名字

winname

軌跡條的父窗口的名稱

實例

下面的代碼將wuli男神和wuli女神的圖片混合在一起,輸入圖片如下:

wuliEddie1.jpg

wuliShishi.jpg

 

 

MixAlphaImages.cxx

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

#define WINDOW_NAME "Mixed Images"

// global variables
const int g_nMaxAlphaValue = 100; // maximun alpha value
int g_nAlphaValueSlider; // value from trackbar
double g_dAlphaValue;
double g_dBetaValue;

// Mat objects for images
cv::Mat g_srcImage1;
cv::Mat g_srcImage2;
cv::Mat g_dstImage;

// on trackbar
void on_Trackbar( int, void* )
{
    g_dAlphaValue = (double) g_nAlphaValueSlider/g_nMaxAlphaValue;
    g_dBetaValue = (1.0-g_dAlphaValue);
    
    addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);
    
    cv::imshow(WINDOW_NAME, g_dstImage);
}

// main
int main( int argc, char** argv )
{
    // load image and show
    g_srcImage1 = cv::imread("wuliEddie1.jpg");
    g_srcImage2 = cv::imread("wuliShishi1.jpg");
    // NOTE: two image should be the same size
    if(!g_srcImage1.data)
    {
        printf("Error getting the first images. Put the image wuliEddie1.jpeg to Debug folder. \n");
        return -1;
    }
    if(!g_srcImage1.data)
    {
        printf("Error getting the second images. Put the image wuliShishi1.jpeg to Debug folder. \n");
        return -1;
    }

    // initialize trackbar value
    g_nAlphaValueSlider = 70;
    
    // create window
    cv::namedWindow(WINDOW_NAME, 1);
    
    // create trackbar
    char TrackbarName[50];
    sprintf( TrackbarName, "Alpha Value %d", g_nMaxAlphaValue );
    
    cv::createTrackbar( TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar );
    
    // to show the initial image
    on_Trackbar(g_nAlphaValueSlider, 0);
    
    cv::waitKey(0);
    return 0;
}

 結果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM