OpenCV3.2学习笔记之TrackBar

声明,这相当于我在学习OpenCV3.2的过程中的笔记,文章中的内容由其他博客里的内容也有我自己的理解,侵删。

函数原型

int createTrackerbar(const string& trackerbarname,
                     const string winname,int* value,int count, 
                     TrackbarCallback onChange=0,void* userdata=0);

其中trackbarName为创建的TrackBar的名字,
winName为创建的TrackBar所依附的窗体名字,
*value指针指向的是TrackBar当前的值,可以通过设置它改变游标的位置,
count为TrackBar的量程,注意一般情况下bar的最小值都是0,
TrackbarCallback为一个回掉函数指针,每当滑动条改变时,都会调用这个函数,函数原型。
void onChangeTrackbar(int ,void* );
其中第一个参数是trackerbar的值,第二个参数是一个无类型的指针,指向userdata。如果这个参数被传进去一个空指针NULL,那么当TrackBar值发生改变的时候什么也不做。
userdata是用户自定义的参数,可自定义传入的参数。
例程:

#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

//定义了窗体名
string winName="Blur Filter";

//TrackBar发生改变的回调函数
void onChangeTrackBar(int poi,void* usrdata);

//主函数
int main ()
{
    //trackbar名
    string trackBarName="Size";
    //图像文件名
    string imgName="image.tif";
    //trackbar的值
    int poiTrackBar=0;
    //trackbar的最大值
    int maxValue=35;

    Mat img;
    img=imread (imgName,CV_LOAD_IMAGE_COLOR);   //读入图像
    namedWindow(winName);      //新建窗口
    imshow (winName,img); 
    //创建trackbar,我们把img作为数据传进回调函数中
    createTrackbar (trackBarName,winName,&poiTrackBar,maxValue,
                    onChangeTrackBar ,&img);

    waitKey ();
    return 0;
}

//回调函数
void onChangeTrackBar (int poi,void* usrdata)
{
    Mat img=*(Mat*)(usrdata);   //强制类型转换
    Mat dst;
    if (poi%2==0)  //poi是偶数,把它减1变为奇数
    {
        poi-=1;
    }
    if (poi>0)   //poi是奇数
    {
        //改变矩阵核
        Size blurSize=Size(poi,poi);
        //刷新
        blur (img,dst,blurSize);
        imshow (winName,dst);
    } 
}

你可能感兴趣的:(OpenCV)