本文共 1374 字,大约阅读时间需要 4 分钟。
滑动条是opencv动态调节参数特别好用的一种工具,它依附于窗口而存在。
我们这里便是应用滑动条实现了小鸟游六花两张美图的转化(doge
创建滑动条:createTrackbar()函数int createTrackbar(const string&trackname,const string&winname,int*value,int count,TrackbarCallback onchange=0,void*userdata=0);
第一个参数:轨迹条名称
第二个参数:窗口名称 第三个参数:滑块位置 第四个参数:滑块最大值 第五个参数:回调函数 第六个参数:传给回调函数的数据,当value为全局变量是不用写完整代码如下:(感觉注释写的还算详细)
#include#include #include #include using namespace std;using namespace cv;#define WINDOW_NAME "邪王真眼是最强的"const int g_maxvalue = 100;//Alpha值的最大值int g_nsilder;//滑动条对应的变量double g_davalue;double g_bvalue;//声明储存图像的变量Mat src1;Mat src2;Mat dst;//全局变量声明部分void on_Trackbar(int, void*){ g_davalue = (double)g_nsilder / g_maxvalue;//求出当前alpha值相对于最大值的比例 g_bvalue = (1.0 - g_davalue);//则beta值为1-alpha addWeighted(src1, g_davalue, src2, g_bvalue, 0.0, dst);//线性混合 imshow(WINDOW_NAME, dst);}//响应滑动条的回调函数int main(int argc,char **argv){ //加载图像(两图像尺寸需相同) src1 = imread("3.jpg"); src2 = imread("4.jpg"); g_nsilder = 70;//设置滑动条初值为70 namedWindow(WINDOW_NAME, WINDOW_NORMAL);//可以自由变化大小的窗口 char TrackbarName[50]; sprintf_s(TrackbarName, "纯净度 %d", g_maxvalue); createTrackbar(TrackbarName, WINDOW_NAME, &g_nsilder, g_maxvalue, on_Trackbar); //创建滑动条控件 on_Trackbar(g_nsilder, 0); //结果在回调函数中显示 waitKey(0); //按任意键退出 return 0;}
图片素材如下
欢迎大家的讨论,谢谢大家(转载地址:http://vvcki.baihongyu.com/