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