HighGUI图形图像界面初步——滑动条的创建和使用

 

  滑动条是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 "【滑动条示例】"

void on_Trackbar(int pos, void *dstImage)
{
    Mat *temp = static_cast<Mat*>(dstImage);
    temp->setTo(pos);
    imshow(WINDOW_NAME,*temp);
}

int main(int argc,char** argv)
{
    int initpos = 7;
    int maxpos = 255;
        Mat dstImage = Mat(500,600,CV_8SC1);
    namedWindow(WINDOW_NAME,1);
    char TrackBarName[50];
    memset(TrackBarName,'\0',sizeof(TrackBarName));
    sprintf_s(TrackBarName,"灰度值");
    createTrackbar(TrackBarName,WINDOW_NAME,&initpos,maxpos,on_Trackbar,&dstImage);
    waitKey(0);
    return 0;
}        

 

posted @ 2018-03-06 20:21  HOU_JUN  阅读(515)  评论(0编辑  收藏  举报