---恢复内容开始---
滑动条是OpenCV动态调节参数特别好用的一种工具,它依附于窗口而存在。由于OpenCV没有实现按钮功能,所以很多时候,我们可以用仅含0-1的滑动条来实现按钮的按下于弹起效果。
1、创建滑动条:createTrackbar()函数
这个函数往往和一个回调函数配合起来使用。
C++ : int createTrackbar(const string & trackbarname, const string & winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
参数说明:
(1)第一个参数,轨迹条的名称;
(2)第二个参数,窗口名称;
(3)第三个参数,表示滑块的初始位置
(4)第四个参数,表示滑块可达到的上限值。
(5)第五个参数,这是一个执行回调函数的指针,当滑块位置变化时候这个函数都进行回掉。这个函数原型必须为:void XXXX(int,void*),其中第一个为轨迹位置,第二个为用户数据。NULL表示没有回调函数。
(6)用户传给回掉函数的数据,用来处理轨迹时间。如果使用第三个参数value实参是全局变量的话,完全可以不用去管这个userdata参数。
// Trackbar.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <opencv2\opencv.hpp> #include "opencv2\highgui\highgui.hpp" using namespace cv; #define WINDOW_NAME "【线性混合示例】" const int g_nMaxAlphaValue = 100; 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; g_dBetaValue = (1.0 - g_dAlphaValue); addWeighted(g_srcImage1, g_dAlphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage); imshow(WINDOW_NAME,g_dstImage); } int main() { g_srcImage1 = imread("D:\\resuouce\\image\\scenic1.jpg"); g_srcImage2 = imread("D:\\resuouce\\image\\scenic.jpg"); if (!g_srcImage1.data) { printf("读取第一张图片失败\n"); return -1; } if (!g_srcImage2.data) { printf("读取第二张图片失败\n"); return -1; } g_nAlphaValueSlider = 70; namedWindow(WINDOW_NAME,1); char TrackbarName[50]; memset(TrackbarName,‘\0‘,sizeof(TrackbarName)); sprintf_s(TrackbarName,"透明值%d", g_nMaxAlphaValue); createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_TrackBar); on_TrackBar(g_nAlphaValueSlider,0); waitKey(0); return 0; }
---恢复内容结束---