OpenCv滑动条的创建


         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中文网站

                                        关键字的函数结构参考来自----百度百科

猜你喜欢

转载自blog.csdn.net/HHCCWWlxy/article/details/79934133