opencv学习5 滑动条的创建及图像的混合操作

马上要五一了,各位小老哥们是不是又要带上自己的男票出去玩了呀。小弟也是一样呀,不过小弟是带着老王去玩耍o( ̄︶ ̄)o。
那今天就介绍一个有趣的例子,一个又能在妹子(hanzi)面前炫耀的小技巧啊哈<( ̄▽ ̄)/!!
**

创建滑动条

**
Trackbar(滑动块)在OpenCV中它可以手动调整参数的工具并且依附于窗口。
这次的例子需要创建一个滑动块来调整图像的透明度得到图像混合的效果。函数如下:

int createTrackbar(const string& trackbarname, const string& winname, int value, int count, TrackbarCallback onChange = 0, void* userdata = 0)*
该函数创建一个滑动块并且把它依附到到指定好的窗口上。

第一个参数:const string&类型的trackbarname,轨迹条的名字,用来代表我们创建的轨迹条
第二个参数:窗口名,表示这个轨迹条依附到哪个窗口上,即对应namedWindow()创建时窗口填的窗口名
第三个参数:int
类型的value,一个指向整形的指针,表示滑块的位置,在创建时,滑块的初始位置就是该变量的值。
第四个参数:int类型的count,表示滑块可以到达的最大位置的值,滑块最小位置的值始终是0
第五个参数:回调函数,这个函数必须是void XXX(int,void*)其中第一个参数是轨迹的位置,第二个参数是用户数据。
第六个参数:void类型的userdata,默认为0,这个参数是用户传递给回调函数的数据,三国第三个使用全局变量的话,这个参数省略

其他参数不多赘述

原理解释

g_dBetaValue=(1.0-g_dAlphaValue); //则beat值为1减去alpha值
通过该代码我们可以知道,该图像混合操作本质上就是在升高一张图片的透明度的同时降低另外一张图片的透明度已达到该视觉效果。

运行结果

请注意两张图片的尺寸必须相同,不然什么小改改都不会出现哦。
那我们就来看看最近热播的倚天屠龙记里面的镁铝把 啊哈真是养眼啊
在这里插入图片描述
小弟感觉黑化后的芷若好看 理由如下:
在这里插入图片描述
不过小弟心里敏敏还是最好看滴 o( ̄︶ ̄)o
在这里插入图片描述
明明如月,何时可掇(duō)。

素素 晓芙呢?有在舔屏的老哥吗,小弟先收拾下口水=.=
在这里插入图片描述
运行结果就是 敏敏最好看 略略略。。。

代码如下

#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;

//   响应滑动条的回调函数
void on_Trackbar(int,void*)
{
	g_dAlphaValue=(double) g_nAlphaValueSlider/g_nMaxAlphaValue;//求出当前AlPHA值相对于最大值的比例
	g_dBetaValue=(1.0-g_dAlphaValue);	//则beat值为1减去alpha值
	addWeighted(g_srcImage1,g_dAlphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage);	//根据alpha和beta值进行线性混合

	imshow(WINDOW_NAME,g_dstImage);	//显示效果图
}
 
int main(int argc, char** argv)
{
	
	//加载图像  图像尺寸要相同!!!!!!!!!!!!!!
	//加载图像  图像尺寸要相同!!!!!!!!!!!!!!
	//加载图像  图像尺寸要相同!!!!!!!!!!!!!!
	//总要的事情说 三千 遍 
	g_srcImage1=imread("min.jpg");
	g_srcImage2=imread("zhi.jpg");
	if(!g_srcImage1.data){printf("读取第一幅图片错误,请确定目录下是否有imread函数指定图片存在~!  \n");return -1;}
	if(!g_srcImage2.data){printf("读取第二幅图片错误,请确定目录下是否有imread函数指定图片存在~!  \n");return -1;}
	g_nAlphaValueSlider=70;	//设置滑动条的初始值为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;
}

1801752

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值