滑动条的创建

虽然之前的学习都有看到过滑动条,但是却没有稍微认真一点来看这个东西。今天学习到了滤波之类的东西,又用到了这个。觉得挺有意思的。本来以为只能用鼠标点击来改变值,没想到还可以用中间的那个滑轮。

滑动条的创建看上去仿佛非常简单(实际难不难我不知道,目前还没看到难的,说不定以后会有,不过现在简单就够了),就一条语句就可以了

createTrackbar(1,2,3,4,5);

参数名字我也懒得写,目前对于我而言我知道怎么用就行。

1.滑动条名字。就是你这个滑动条调的是什么。

2.要依附的窗口的名字。你创建一个滑动条,肯定要找一个东西来放是不是。我们在写这个创建滑动条的语句之前要先放一个窗口出来。namedWindow()就可以了。注意了哦,我们要依附的窗口的名字肯定是要和之前创建的窗口的名字填写成一样的。

3.滑动条的初始值。是int*类型的。一般而言,我们会在主程序开始之前就定义一个全局变量,例如,我们定义一个

int g_nContrastValue = 5;

就说明我们希望滑动条的初始值为5,在这里参数的填写的时候,加一个&在g_nContrastValue前面就好了(是int*类型的嘛)。

4.滑块可以到达的的最大的位置的值。这个就看心情了(开玩笑,看程序需要)。

5.回掉函数。emmm,这个仿佛是很重要的。目前我理解的是,要创建一个滑动条出来,一定要有一个函数,而且这个函数的申明方式也是固定的:

void LetUsSetATrack(int , void*);

当然了,函数名自然是可以不一样的。

这个回掉函数的功能就是,每一次我们改变滑动条的值的时候,程序就会调用这个函数。emmm,也就是说,我们想要用滑动条时宪书额还那么功能,就一股脑的把这些代码塞进这个回掉函数就好了。

举个例子

我们想实现高斯滤波,并用滑动条来控制内核值。

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

using namespace cv;


int g_nContrastValue = 5;
Mat srcImage;
Mat dstImage;

static void LetUsSetATrack(int, void *);

int main()
{
    srcImage = imread("1.jpg");
    namedWindow("【高斯滤波】");
    createTrackbar("内核值", "【高斯滤波】", &g_nContrastValue, 50, LetUsSetATrack);
    waitKey(0);
    return 0;
}

static void LetUsSetATrack(int, void*)
{
    GaussianBlur(srcImage, dstImage, Size(g_nContrastValue * 2 + 1, g_nContrastValue * 2 + 1), 0, 0);
    imshow("【高斯滤波】", dstImage);

}

运行效果如下

 

emmm,就这样了。。。还是觉得。。自己智商不够。。。

posted @ 2017-11-11 17:24  QianQiYing  阅读(380)  评论(0编辑  收藏  举报