您的位置:首页 > 运维架构

OpenCV3.2学习笔记之TrackBar

2017-05-28 21:24 507 查看
声明,这相当于我在学习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 <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OpenCV3-2 TrackBar