opencv 滑动条 cvCreateTrackbar()

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;
}

opencv 滑动条 cvCreateTrackbar()_第1张图片


opencv 滑动条 cvCreateTrackbar()_第2张图片




你可能感兴趣的:(opencv)