在调试程序或者程序执行时需要调整某个变量的值亦或是参数的值,我们需要一个简单方便的操作,滚动条就是一个非常使用的工具。通过鼠标点击对滚动条进行拖动操作以期实现调整某个参数的值。下面例程参见Opencv 安装目录 samples tutorial_code文件夹。
#include"opencv2/opencv.hpp"
using namespace cv;
using namespace std;const int alpha_slider_max = 100;
int alpha_slider;
double alpha;
double beta;//存储矩阵
Mat src1, src2, dst;void on_tracker(int, void*);
int main(int argc, char* argv[])
{src1 = imread("C:/Users/lyb/Documents/Visual Studio 2013/Projects/ConsoleApplication trackbar/Debug/1.jpg");src2 = imread("C:/Users/lyb/Documents/Visual Studio 2013/Projects/ConsoleApplication trackbar/Debug/2.jpg");if (!src1.data){ cout << "Error loading src1" << endl; return -1; } //判断载入是否成功if (!src2.data){ cout << "Error loading src2" << endl; return -1; }alpha_slider = 0;namedWindow("Linear_blend");//namedWindow("control_image");//建立滑块char TrackbarName[50];sprintf(TrackbarName, "Alpha x %d", alpha_slider_max);//标准写入字符串createTrackbar(TrackbarName, "Linear_blend", &alpha_slider, alpha_slider_max, on_tracker);//参数1滑块名称 参数2显示窗口 参数3 OPENCV将当前滑块位置值传给指针指向的整数 参数4滑块调整范围最大值 参数5指向回调函数的指针,当滑动条被拖动时,函数自动调用on_tracker(alpha_slider, 0);waitKey(0);return 0;}void on_tracker(int, void*) //滑块所对应的操作函数 对图像进行线性混合
{alpha = (double)alpha_slider / alpha_slider_max;beta = (1.0 - alpha);addWeighted(src1, alpha, src2, beta, 0.0, dst);/*cvAddWeighted 计算两数组的加权值的和: dst(I) = src1(I)*alpha + src2(I)*beta + gamma cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );src1 //第一个原数组.alpha //第一个数组元素的权值src2 //第二个原数组beta //第二个数组元素的权值gamma //添加的常数项。dst //输出数组*/imshow("Linear_blend", dst);
}