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

opencv 滑动条 cvCreateTrackbar()

2015-07-07 13:45 169 查看
typedef void (CV_CDECL *CvTrackbarCallback)(int pos);
/* create trackbar and display it on top of given window, set callback */
CVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,
int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));


参数:

trackbar_name 被创建的trackbar名字。

window_name 窗口名字,这个窗口将为被创建trackbar的父对象。

value 整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。

count 滑块位置的最大值。最小值一直是0。

on_change 每次滑块位置被改变的时候,被调用函数指针。这个函数应该被声明为void
Foo(int); 如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数

被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。 

程序:首先创建一个窗口用于显示图像,滑动条(trackbar)用于设置阈值,然后对二值化后的图像提取轮廓并绘制轮廓。当控制参数的滑动条变化时,图像被更新

IplImage *g_image=NULL;
IplImage *g_gray=NULL;
int g_thresh=100;
CvMemStorage *g_storage=NULL;

void on_trackbar(int){
if(g_storage == NULL)
{
g_gray=cvCreateImage(cvGetSize(g_image), 8, 1);
g_storage=cvCreateMemStorage(0);
} else {
cvClearMemStorage(g_storage);
}
CvSeq *contours=0;
cvCvtColor(g_image, g_gray, CV_BGR2GRAY);
cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY);
cvFindContours(g_gray, g_storage, &contours);
cvZero(g_gray);
if (contours)
cvDrawContours(g_gray, contours, cvScalarAll(255), cvScalarAll(255), 100);
cvShowImage("Contours", g_gray);
}

int main(void)
{
g_image = cvLoadImage("lena.jpg");
cvNamedWindow("Contours");
cvCreateTrackbar("Threshold", "Contours", &g_thresh, 255, on_trackbar);
on_trackbar(0);
cvWaitKey(0);

return 0;
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: