关于OpenCV滑动条与回调函数的问题剖析

在学习OpenCV的时候,我们经常要使用滑动条,但可能会出现一些如下疑问

问题1:为什么创建滑动条的时候已经指定回调函数了,为什么在下面还要调用一次回调函数?

问题2:为什么有时再次调用回调函数的时候,会有两个形式:on_func(0,0) 与 on_func(滑动条初始化时的值,0)?

解答

解答问题1

因为创建滑动条的时候,第五个参数是指向回调函数的指针,每次滑动位置改变的时候,才会调用回调函数。也就是说,刚开始的时候滑动条没有滑动,不会调用回调函数,所有为了使刚开始启动的程序的时候就能看到初始化的默认处理,就要在下面调用一次回调函数。

解答问题2

on_func(0,0)与on_func(滑动条初始化时的值,0)这两种形式实际没有区别,第二中,只是显示地指出滑动条的默认初始化值,因为,回调函数括号里的第一个形参是int形式的占位,这个int值不会被使用。所以,on_func(滑动条初始化时的值,0)只是为了是程序明了一些,与on_func(0,0)没有本质区别。

示例代码如下:

//创建trackbar
createTrackbar("参数值:", "Canny边缘检测-效果图", &g_cannyLowThreshold, 120, on_Canny);
createTrackbar("参数值:", "Sobel边缘检测-效果图", &g_sobelKernelSize, 3, on_Sobel);

//调用回调函数
on_Canny(g_cannyLowThreshold, 0); //不加这句调用,刚开始显示是黑屏
			//,即还没有处理,滑动滑动条才开始处理,多加个调用回调函数,可以初始化处理

on_Sobel(0, 0);  //写第一个参数写0也可以,为了简单明了

猜你喜欢

转载自blog.csdn.net/Young__Fan/article/details/81506415