#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;
}
opencv学习笔记(5)---- 滑动条的创建和使用
最新推荐文章于 2023-02-04 22:01:56 发布