Opencv—滑动条

createTrackbar()用于创建一个可以调整数值的滑动条(轨迹条),并将滑动条附加在指定的窗口。
注:与回调函数一起配合使用。
int createTrackbar(conststring & trackbarname, conststring & winname, int * value, int count, TrackbarCallback inChange=0, void * userdata=0)

  • conststring & trackbarname 轨迹条名称;
  • conststring & winname 窗口名称,表示轨迹条要添加的窗口
  • int * value 轨迹条的位置,创建时设定的初始值
  • int count 轨迹条的最大值,最小值始终是0
  • TrackbarCallback inChange=0 有默认值0,是一个指向回调函数的指针,每次改变轨迹条位置都会调用这个函数,这个函数的原型必须为 void XXXXXX(int, void*)其中第一个参数是轨迹条的位置,第二个参数是用户数据(看下面的userdata参数)。如果回调是NULL指针,则表示没有回调函数调用,仅第三个参数Value有变化。
  • void * userdata=0 有默认值0,这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果第三个参数value是全局变量则不需要管这个userdata参数
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.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);
}
//--------------------------------【main()函数】--------------------
//     描述:控制台应用程序的入口函数
//-----------------------------------------------------------------
int main(int argc, char ** argv)
{
	//加载图像 (两图像的尺寸需相同)
	g_srcImage1 = imread("E:/picture/2.jpg");
	g_srcImage2 = imread("E:/picture/3.jpg");
	if (!g_srcImage1.data)
	{
		printf("读取第一幅图片错误,请确定目录下是否由imread函数指定图片存在~!\n");
		return -1;
	}
	if (!g_srcImage2.data)
	{
		printf("读取第一幅图片错误,请确定目录下是否由imread函数指定图片存在~!\n");
		return -1;
	}
	// 设置滑动条的初值为70
	g_nAlphaValueSlider = 70;

	//创建窗体
	namedWindow(WINDOW_NAME, 1);
	//在创建的窗体中创建一个滑动条控件
	char TrackbarName[50];
	sprintf_s(TrackbarName, "透明度 %d", g_nMaxAlphaValue);
	createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);
	//结果在回调函数中显示
	on_Trackbar(g_nAlphaValueSlider, 0);
	waitKey(0);
	return 0;
}

在这里插入图片描述

获取当前轨迹条的位置:
int getTrackbarPos(conststring & trackbarname, conststring & winname);
trackbarname轨迹条的名字
winname,轨迹条父窗口的名称

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章