opencv学习笔记(5)---- 滑动条的创建和使用

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
/*
关于imread函数:
Mat imread(const string& filename,int flags = 1);
第二个参数flags指定一个加载图像的颜色类型
flags=0:返回灰度图像;
flags=1:返回3通道的彩色图像
flags<0:返回包含Alpha通道的加载图像
*/

/*
关于imshow函数:
void imshow(const string& winname, InputArray mat);
第一个参数填用于显示图像的窗口标识名称
第二个InputArray类型大部分情况下可以等于Mat类型
*/

/*
关于namedWindow函数:
void nameWindow(const string& winname, int flags = WINDOW_AUTOSIZE);
flags有以下几个值:
WINDOW_NORMAL:用户可以改变窗口的大小;
WINDOW_AUTOSIZE:窗口大小会自动调整以适应所显示的图像,用户不能手动改变窗口大小
WINDOW_OPENGL:窗口创建时会支持OpenGL
*/

/*
关于createTrackbar函数:
int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
第一个参数:轨迹条的名字
第二个参数:轨迹条所依附的窗口的名字
第三个参数:一个指向整型的指针,表示滑块的位置,滑块的初始位置就是该变量当前的值
第四个参数:表示可以到达的最大位置的值
第五个参数:是一个指向回调函数的指针,每次滑块位置改变是,这个函数都会进行回调,且这个函数的原型为void XXXX(int, void*),
            其中第一个参数是轨迹条的位置,第二个参数是用户数据
第六个参数:void*类型的userdata,用户传给回调函数的数据,如果第三个参数value是全局变量的话,可以不管这个userdata参数
*/

#define WINDOW_NAME "线性混合实例"

//-----------------------------【全局变量声明部分】-------------------------------------------
//      描述:全局变量声明
//--------------------------------------------------------------------------------------------
const int g_nMaxAlphaValue = 100;//Alpha值得最大值
int g_nAlphaValueSlider;//滑动条对应的变量
double g_dAlphaValue;
double g_dBetaValue;

Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;

//-----------------------------【on_Trackbar()函数】------------------------------------------
//       描述:响应滑动条的回调函数
//--------------------------------------------------------------------------------------------
void on_Trackbar(int, void*)
{
    //求出当前alpha值对于最大值的比例
    g_dAlphaValue = (double)g_nAlphaValueSlider / 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.jpg");
    g_srcImage2 = imread("2.jpg");
    if (!g_srcImage1.data){
        cout << "读取第一幅图片错误" << endl;
        return -1;
    }
    if (!g_srcImage2.data){
        cout << "读取第2幅图片错误" << endl;
        return -1;
    }

    g_nAlphaValueSlider = 70;
    namedWindow(WINDOW_NAME, 1);
    //创建一个滑动条控件
    char TrackbarName[50];
    sprintf(TrackbarName, "透明值 %d", g_nMaxAlphaValue);
    createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);

    //结果在回调函数中显示
    on_Trackbar(g_nAlphaValueSlider, 0);
    waitKey(0);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值