createTrackbar( )
作用:创建一个滚动条并把它附加到特定的窗口中。
形式:int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
参数:
trackbarname:在标签中显示的文字(提示滑动条的用途);
winname:创建的滑动条要放置窗体的名字;
value:整形变量的可变的指针,它的值反映了滚动条的位置,在创建的时候,滚动条的位置由这个变量决定;
count:滚动条的最大位置,最小位置一般是0;
onChange:每次滚动条改变位置都会调用指向该功能的指针,这个功能的原型为void Foo(int,void*);如果回调函数是个空指针,就没有回调被调用,但是唯一的值被更新;
userdata:传递给回调函数的用户数据,它可以不用全局变量而处理滚动条的事件。
addWeighted()
作用:计算两个数组的加权和。
形式:void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
参数:
src1:输入的第一个数组;
alpha:第一个输入数组元素的权重;
src2:输入的第二个数组,和 src1大小、通道相同;
beta:第二个输入数组元素的权重;
gamma:给每个加权和加的标量;
dst:输出的数组;
dtype:输出数组的可选的深度,当和输入数组深度相同时取-1,即src1.depth();
<span style="font-size:14px;">#include <cv.h>
#include <highgui.h>
using namespace cv;
/// 全局变量的声明与初始化
const int alpha_slider_max = 100;
int alpha_slider;
double alpha;
double beta;
/// 声明存储图像的变量
Mat src1;
Mat src2;
Mat dst;
/**
* @function on_trackbar
* @定义响应滑动条的回调函数
*/
void on_trackbar( int, void* )
{
alpha = (double) alpha_slider/alpha_slider_max ;
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
imshow( "Linear Blend", dst );
}
int main( int argc, char** argv )
{
/// 加载图像 (两图像的大小与类型要相同)
src1 = imread("../../images/LinuxLogo.jpg");
src2 = imread("../../images/WindowsLogo.jpg");
if( !src1.data ) { printf("Error loading src1 \n"); return -1; }
if( !src2.data ) { printf("Error loading src2 \n"); return -1; }
/// 初始化为零
alpha_slider = 0;
/// 创建窗体
namedWindow("Linear Blend", 1);
/// 在创建的窗体中创建一个滑动条控件
char TrackbarName[50];
sprintf( TrackbarName, "Alpha x %d", alpha_slider_max );
createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );
/// 结果在回调函数中显示
on_trackbar( alpha_slider, 0 );
/// 按任意键退出
waitKey(0);
return 0;
}</span>