OpenCV滑动条的创建
关键字:cvCreateTrackbar()
cvDrawContours()
1. cvCreateTrackbar ( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change );
参数:
trackbar_name 被创建的trackbar名字。
window_name 窗口名字,这个窗口将为被创建trackbar的父对象。
value 整数 指针 ,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。
count 滑块位置的最大值。最小值一直是0。
on_change 每次滑块位置被改变的时候, 被调用函数 的指针。这个函数应该被声明为void Foo(int); 如果没有 回调函数 ,这个值可以设为NULL。
2.void cvDrawContours ( CvArr *img, CvSeq* contour, CvScalar external_color, CvScalar hole_color, int max_level, int thickness=1,
int line_type=8, CvPoint offset= cvPoint (0,0) );
参数:
img 要在其上绘制轮廓的图像。和在其他绘图函数里一样,轮廓是ROI的修剪结果。
contour 指向第一个轮廓的 指针 。
external_color 外轮廓的颜色。
hole_color 内轮廓的颜色。
max_level 画轮廓的最大层数。如果是0,只绘制contour;如果是1,将绘制contour后和contour同层的所有轮廓;如果是2,绘制 contour 后所有同层和低一层的轮廓,以此类推;如果值是负值,则函数并不绘制contour后的轮廓,但是将画出其子轮廓,一直到abs(max_level) - 1层。
thicknes 绘制轮廓线的宽度。如果为负值(例如,等于CV_FILLED),则contour内部将被绘制。
line_type 轮廓线段的类型,具体查看 cvLine 的描述。offset 按给定值移动所有点的坐标。
主要算法:
//定义回调函数on_trackbar来实现想要的结果
void on_trackbar( int ) {
if (pos == NULL )
{
gray = cvCreateImage(cvGetSize(src), 8, 1);
pos = cvCreateMemStorage(0);
}
else {
cvClearMemStorage(pos); //创建内存块
}
CvSeq *contours = 0;
cvCvtColor(src, gray, CV_BGR2GRAY );
cvThreshold(gray, gray, g_thresh, 255, CV_THRESH_BINARY );
cvFindContours(gray, pos, &contours); //寻找轮廓
cvZero (gray);
if (contours)
cvDrawContours(gray, contours, cvScalarAll(255), cvScalarAll(255), 200); //绘制轮廓
cvShowImage( "Img" , gray);
}
主函数:int main(void)
{
src= cvLoadImage("03.jpg");
cvNamedWindow("Img");
cvCreateTrackbar("Threshold", "Img", &g_thresh, 255, on_trackbar);//创建滑动条
on_trackbar(0);cvWaitKey(0);
return 0;}
运行结果如下:实现的功能:随着滑动条的变化,图片的灰度值也跟着变化。彩色图片为原图:
参考文献:OpenCV中文网站
关键字的函数结构参考来自----百度百科