OpenCV--滑动条的创建-creatTrackbar() [addWeighted()]

OpenCV API Reference   http://docs.opencv.org/2.4.9/modules/refman.html

滑动条(Trackbar)是opencv动态调节参数特别好用的一种工具,它依赖窗口而存在

创建滑动条:creatTrackbar()函数

creatTrackbar用于创建一个可以调整数值的滑动条,并将滑动条依附到指定的窗口上,需要和一个回调函数配合使用


本文使用滑动条实现两张图片的线性混合:

    



主程序如下所示:

/************************************************************************/
/* 
OpenCV创建滑动条函数:creatTrackbar()

函数原型:
int creatTrackbar(const string& trackbarname,const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0)

参数含义:
const string& trackname         -滑动条名字 
const string& winname           -想要把该滑动条依附到的窗口名字,在程序中可能该窗口名称由namedWindow()声明。 
int* value                      -创建滑动条时,滑动条的初始值 
int count                       -滑动条的最大值,即所有滑动条的数据变动都要在0-count之间,滑动条最小值为0 
TrackbarCallback onChange = 0   -回调函数,每次滑动条数据变化时都对该函数进行回调 
void* userdata = 0              -用户传给回调函数的数据,用来处理滑动条数值变动。如果在创建滑动条时,输入value实参是全局变量,则可使用默认值0.


OpenCV线性混合函数:addWeighted()

函数原型:
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)

参数含义:
InputArray src1        -原图像1 
double alpha           -图像1比重 
InputArray src2        -原图像2
double beta            -图像2比重
double gamma           -一个加到权重总和上的标量值,默认0.0
OutputArray dst        -输出图像.
int dtype=-1           -输出阵列的可选深度,有默认值-1。

*/
/************************************************************************/


//使用滑动条表达两幅图像的线性混合
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace cv;

#define WINDOW_NAME "线性混合"

//变量声名
const int g_nMaxAlphaValue=100;  //Alpha的最大值
int g_nAplaValueSlider;  //滑动条对应的变量
double g_dAplaValue;   //第一幅图的权重
double g_dBetaValue;   //第二幅图的权重

//声名存储图像的变量
Mat g_srcImage1;   //原图1 
Mat g_srcImage2;   //原图2
Mat g_dstImage;    //混合结果图


//相应滑动条的回调函数
void on_Trackbar(int,void* )
{
	//求出当前的alpha值对于最大值的比例
	g_dAplaValue=(double)g_nAplaValueSlider/g_nMaxAlphaValue;

	//求第二张图片的权重
	g_dBetaValue=(1.0-g_dAplaValue);

	//线性混合
	addWeighted(g_srcImage1,g_dAplaValue,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("第一张读取失败\n");
		return -1;
	}

	if (!g_srcImage2.data)
	{
		printf("第二张读取失败\n");
		return -1;
	}

	//设置滑动条的初始位置
	g_nAplaValueSlider=50;

	//创建窗体
	namedWindow(WINDOW_NAME);

	//在创建的窗体中创建一个滑动条
	char TranckbarName[50]="当前透明值";

	createTrackbar(TranckbarName,WINDOW_NAME,&g_nAplaValueSlider,g_nMaxAlphaValue,on_Trackbar);

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

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



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值