《学习OpenCV》书中的一个例子
用滑动条设置阈值,观察不同阈值下轮廓的变化。
/*
根据滑动条参数检测轮廓
*/
#include"highgui.h"
#include"cv.h"
#include"cxcore.h"
int g_thresh = 100;
CvMemStorage* g_storage = NULL;
IplImage* g_gray = NULL;
IplImage* img = cvLoadImage("fruits.jpg");//一般声明为NULL,在主函数中调用cvLoadImage.
void on_trackbar(int h);
void doContour2()
{
cvNamedWindow("contours",1);
cvCreateTrackbar(
"Threshold",
"contours",
&g_thresh,
200,
on_trackbar
);
on_trackbar(0);
cvWaitKey();
}
void on_trackbar(int h){
g_gray = cvCreateImage(cvGetSize(img), 8 ,1);
g_storage = cvCreateMemStorage(0);
CvSeq* contours = 0;
cvCvtColor(img, g_gray, CV_BGR2GRAY);
cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY);
cvFindContours(g_gray, g_storage, &contours);
cvZero(g_gray);
cvDrawContours(
g_gray,
contours,
cvScalarAll(255),
cvScalarAll(255),
100
);
cvShowImage("contours", g_gray);
}
结果: