标签:
开始找工作了,随时会把复习笔记粘上来。
今天用OpenCV提供的TrackBar实现一个Image Gallery.
1. 在OpenCV的HighGUI模块中,提供了slider(滑动条)的一种形式,称为trackbar,可以用一个int类型指定可滑动最大值。由cv::CreateTrackbar() 函数创建滑动条,与鼠标响应类似,使用回调函数实现滑动的响应事件。分别介绍cv::CreateTackbar()函数和回调函数。
createTrackbar函数原型:
int createTrackbar(const string& trackbarname, const string& winname, int* value,
int count,TrackbarCallback onChange=0, void* userdata=0);
参数解释: trackbarname-滑动条的名称,滑动条创建后出现在窗口的底部或顶部,不会覆盖图片
winname-窗口的名称
value-int类型的指针,用来记录滑动位置,该整数的值作为滑动条的最小值
count-滑动条最大值
onChange-指向滑动条的回调函数的指针,缺省时,仅更新value的值,不调用回调函数
userdata-可选参数,具体用法看例子,该参数未缺省时,回调函数的参数表要保持一致
回调函数必须为TrackbarCallback格式,TrackbarCallback定义如下
void (*callback) ( int position, void* userdata)
除此之外可以通过getTrackbarPos(trackname,winname),setTrackbarPos(trackname,winname)得到和设置滑块的位置
2.实现Image Gallery
在“ImageGallery”窗口中创建滑动条“Gallery”,option变量记录滑块的值,最大值为3;
std::vector<cv::Mat> imgVec;
int option = 0; cv::namedWindow("ImageGallery",CV_WINDOW_AUTOSIZE); cv::createTrackbar("Gallery","ImageGallery", &option, 3, ImageSelect, &imgVec); cv::imshow("ImageGallery",img1); cv::waitKey(0);
回调函数的实现
void ImageSelect( int position,void* param ) { std::vector<cv::Mat>* vec = (std::vector<cv::Mat>*) param; if ( (*vec).empty()) return; switch( position) { case 0 : { cv::imshow("ImageGallery",(*vec)[0]); } break; case 1: { cv::imshow("ImageGallery",(*vec)[1]); } break; case 2: { cv::imshow("ImageGallery",(*vec)[2]); } break; case 3: { cv::imshow("ImageGallery",(*vec)[3]); } break; } }
效果图如下:
用滑动条可以动态地调参数,并且一个窗体可以放置多个滑动条
OpenCV学习笔记1:用TrackBar实现Image Gallery
标签:
原文地址:http://www.cnblogs.com/stanfordbunny/p/4810000.html