OpenCV4入门系列教程21:滑动栏

索引地址:系列教程索引地址

上一篇:OpenCV4入门系列教程20:图像掩膜mask

之前的所有教程相当于OpenCV基础入门,在以后的开发中会经常遇到。接下来介绍以下与界面相关的组件。

滑动栏会根据滑块位置生成一个动态值,这样就不需要频繁修改代码中数值的部分了。

滑动栏

在OpenCV中有许多函数会接收不同的参数呈现不同的效果。

比如说

1
double cv::threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

这个函数用来将灰度图像二值化(将像素值变为0/1),而double thresh这个参数就是二值化的标准(阀值)。比如说thresh=100,那么图片中所有像素值小于100的点的值都会被赋值为0。

但是在开发时我们需要动态调整阀值,那么我们就需要在图片处理的界面上面添加一个滑动栏用于动态调整。点击拖动滑块会选定不同的值,这样的话进行参数动态调整会非常的简单。

函数原型:

1
2
3
4
5
6
7
int cv::createTrackbar  (  const String &   trackbarname,
const String & winname,
int * value,
int count,
TrackbarCallback onChange = 0,
void * userdata = 0
)

参数说明:

  • 第一个参数为滑动栏名字,随意命名。
  • 第二参数是窗口的名字,OpenCV显示窗口是必须设置窗口的名字,而且此函数要求窗口命名必须在前面。如果没有则需要创建,可以直接用imshow显示一个,也可以使用namedWindow()函数指定。
  • 第三个参数为默认值,比如说默认二值化阀值为100。
  • 第四个参数为最大值(默认最小值为0),二值化是最大值为255,否则就没有效果了。
  • 第五个参数为回调函数,当滑动栏滑块移动时调用的函数,比如说示例代码的回调函数是输出当前的值。

回调函数名字任意,参数任意,参数个数任意。滑动栏的前提是使用OpenCV的界面,如果只是处理图片不涉及显示就没有必要了。

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>//标准头文件
#include <opencv2/opencv.hpp>//OpenCV全部头文件包含

using namespace std;

int g_nTrackBarValue=10;//动态参数值
void on_TrackBarChange(int g_nTrackBarValue,void *);//回调函数

int main()
{
cv::Mat g_mat = cv::imread("./1.jpg");//读取图片
cv::imshow("testing",g_mat);//显示图片
cv::createTrackbar("valuebar","testing",&g_nTrackBarValue,100,on_TrackBarChange);//创建滑动栏

cv::waitKey(0);//必须要有,否则程序会直接退出
}

void on_TrackBarChange(int g_nTrackBarValue,void *){
std::cout << "Current trackbar value is: "<<g_nTrackBarValue<<endl;
}

测试效果:先看一下效果:

trackbar

下一篇:OpenCV4入门系列教程22:鼠标操作