基金会网站建设方案,比较好的手机网站,dedecms做视频网站,手机优化大师官网createTrackbar这个函数我们以后会经常用到#xff0c;它创建一个可以调整数值的轨迹条#xff0c;并将轨迹条附加到指定的窗口上#xff0c;使用起来很方便。首先大家要记住#xff0c;它往往会和一个回调函数配合起来使用。先看下他的函数原型#xff1a; int createTra…createTrackbar这个函数我们以后会经常用到它创建一个可以调整数值的轨迹条并将轨迹条附加到指定的窗口上使用起来很方便。首先大家要记住它往往会和一个回调函数配合起来使用。先看下他的函数原型 int createTrackbar(const String trackbarname, const String winname,int* value, int count,TrackbarCallback onChange 0,void* userdata 0); 第一个参数const string类型的trackbarname表示轨迹条的名字用来代表我们创建的轨迹条。第二个参数const string类型的winname填窗口的名字表示这个轨迹条会依附到哪个窗口上即对应namedWindow创建窗口时填的某一个窗口名。第三个参数int* 类型的value一个指向整型的指针表示滑块的位置。并且在创建时滑块的初始位置就是该变量当前的值。第四个参数int类型的count表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。第五个参数TrackbarCallback类型的onChange首先注意他有默认值0。这是一个指向回调函数的指针每次滑块位置改变时这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置第二个参数是用户数据看下面的第六个参数。如果回调是NULL指针表示没有回调函数的调用仅第三个参数value有变化。第六个参数void*类型的userdata他也有默认值0。这个参数是用户传给回调函数的数据用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量的话完全可以不去管这个userdata参数。 这个createTrackbar函数为我们创建一个具有特定名称和范围的轨迹条Trackbar或者说是滑块范围控制工具指定一个和轨迹条位置同步的变量。而且要指定回调函数onChange第五个参数在轨迹条位置改变的时候来调用这个回调函数。并且我们知道创建的轨迹条显示在指定的winname第二个参数所代表的窗口上。 实例 下面给一个使用轨迹条改变图像亮度的例子 1 // opencv_bright.cpp: 定义控制台应用程序的入口点。2 //3 4 //************头文件包含*************5 #include stdafx.h6 #includeiostream7 #includeopencv.hpp//包含opencv的头文件8 //***********************************9
10
11 //************命名空间***************
12 using namespace cv;//使用opencv命名空间
13 using namespace std;
14 //***********************************
15
16
17 //************全局变量***************
18 Mat img_src;//定义一个输入图像变量
19
20 //***********************************
21
22
23 //************全局函数***************
24 static void image_brighttrackbar(int,void*);//trackbar回调函数用于改变图像亮度
25
26
27 //***********************************
28
29
30 //************主函数*****************
31 int main()
32 {
33 int key_number;
34 int bar_pos100;//轨迹条位置值也可以定义为全局变量
35
36 namedWindow(原图, 0);//创建窗口
37 namedWindow(处理图, 0);//创建窗口
38
39 img_src imread(1.jpg);//读取输入图像
40 if (!img_src.data) { printf(读取图片\1.jpg\错误); return -1; }//判断是否读取图像成功
41
42
43 createTrackbar(亮度,处理图 ,bar_pos, 200, image_brighttrackbar);//创建轨迹条
44 image_brighttrackbar(bar_pos, 0);//调用轨迹条回调函数函数功能是改变图像亮度
45 //这个函数当轨迹条事件触发时会自动调用不需要放到循环里这里调用一次为了第一次显示处理图片需不需要调用具体情况具体对待
46
47
48 while (1)
49 {
50 imshow(原图, img_src);//显示图像
51
52 key_number waitKey(0);
53 if (key_number 27 || char(key_number) q || char(key_number) Q)//按下Q键或者ESC键退出程序
54 break;
55 }
56
57 return 0;
58 }
59
60
61 //回调函数使用指针访问像素改变图像亮度
62 void image_brighttrackbar(int bar_pos,void*)
63 {
64
65 Mat dst;
66 int channels img_src.channels();
67 dst img_src.clone();
68
69 for (int i 0; i dst.rows; i)
70 {
71 uchar* p_data1 img_src.ptr(i);
72 uchar* p_data2 dst.ptr(i);
73
74 for (int k 0; k dst.cols*channels; k)
75 {
76 p_data2[k] saturate_castuchar(p_data1[k] bar_pos);//输出图像像素原图像像素轨迹条当前位置
77 }
78 }
79 imshow(处理图, dst);//显示图像
80 } 运行结果 下载 功能很简单代码很少建议自己写一下或者在博文中复制一下当然实在是懒的不要不要的土豪可以去下面的连接直接下载。附件的代码文件关于image_brighttrackbar(bar_pos, 0);调用略有差异博文中是优化过的。 【opencv学习笔记八】创建Trackbar轨迹条 转载于:https://www.cnblogs.com/nicewe/p/8462023.html