zoukankan      html  css  js  c++  java
  • 滑动条 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. 
    ");
            return -1;
        }
        if(!g_srcImage1.data)
        {
            printf("Error getting the second images. Put the image wuliShishi1.jpeg to Debug folder. 
    ");
            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;
    }

     结果图

  • 相关阅读:
    asp.net 获取当前项目的根目录路径
    asp.net 中 UEditor 图片和附件上传失败的处理方法
    [LOJ#2331]「清华集训 2017」某位歌姬的故事
    [LOJ#2330]「清华集训 2017」榕树之心
    [LOJ#2329]「清华集训 2017」我的生命已如风中残烛
    [LOJ#2328]「清华集训 2017」避难所
    [LOJ#2327]「清华集训 2017」福若格斯
    [LOJ#2326]「清华集训 2017」简单数据结构
    [LOJ#2325]「清华集训 2017」小Y和恐怖的奴隶主
    [LOJ#2324]「清华集训 2017」小Y和二叉树
  • 原文地址:https://www.cnblogs.com/Xiaoyan-Li/p/5677281.html
Copyright © 2011-2022 走看看