3.4 为程序界面添加滑动条

#define _CRT_SECURE_NO_WARNINGS  //为了消除那个不安全sprintf函数错误警告
                   //必须写在第一行,也包括在注释的前面,真正的第一行

/**
*Copyright (c) 2018 Young Fan.All Right Reserved.
*Filename: 4 为程序界面添加滑动条
*Author: Young Fan
*Date: 2018.4.5
*OpenCV version: 3.4.1
*IDE: Visual Studio 2017
*Description:为程序界面添加滑动条
*/

#include<opencv2/opencv.hpp>
using namespace cv;

#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;
    //则Beta(贝塔)值为1减去Alpha值
    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)
    {
        printf("读取第一幅图片错误,请确定目录下是否有imread函数指定图片存在!\n");
        return -1;//返回-1,表示错误,失败
    }
    if (!g_srcImage2.data)
    {
        printf("读取第二幅图片错误,请确定目录下是否有imread函数指定图片存在!\n");
        return -1;//返回-1,表示错误,失败
    }

    //设置滑动条初值为70
    g_nAlphaValueSlider = 70;

    //创建窗体
    //第二个参数1,代表WINDOW_AUTOSIZE,即窗口自动调整。
    namedWindow(WINDOW_NAME,1);// 不写1,默认是1

    //在创建的窗体中创建一个滑动条控件
    char TrackbarName[50];
    sprintf(TrackbarName,"透明值 %d",g_nMaxAlphaValue);//这里报了一个不安全的sprintf函数的错误,需要消除
    createTrackbar(TrackbarName,WINDOW_NAME,&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);

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


    //按任意键退出
    waitKey(0);

    return 0;
}

总结:

sprintf(TrackbarName,”透明值 %d”,g_nMaxAlphaValue);//这里报了一个不安全的sprintf函数的错误,需要消除

 #define _CRT_SECURE_NO_WARNINGS  //为了消除那个不安全sprintf函数错误警告
               //必须写在第一行,也包括在注释的前面,真正的第一行

创建窗体
第二个参数1,代表WINDOW_AUTOSIZE,即窗口自动调整。
namedWindow(WINDOW_NAME,1);// 不写1,默认是1

猜你喜欢

转载自blog.csdn.net/young__fan/article/details/79987624
3.4
今日推荐