# include <cv.h> # include <highgui.h> 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);//使用g_thresh中所保存的值二值化该图像。为找到轮廓做准备。 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(int argc, char **argv){ if (argc!=2 || !(g_image = cvLoadImage(argv[1]))) return -1; cvNamedWindow("Contours", 1); cvCreateTrackbar( "Threshold", "Contours", &g_thresh, 255, on_trackbar ); on_trackbar(0); cvWaitKey(); return 0; } /* 2015年12月28日16:28:17 折腾了一个下午总算是把openCV的配置弄完了。之前也并没有注意cvLoadImage函数在处理图像的时候,在命令行写的是“文件名.jpg”,因为这个白白浪费了这么长的时间。要疯了。 滚动条也运行了出来。简单看了一下这个程序。cvCreateTrackbar函数创建了滚动条,然后把滚动条命名成了"Threshold"。整个结构在cvNamedWindow创建的窗体Contours中。默认的阈值取得是 g_thresh变量中所保存的值。初始100. cvCreateTrackbar创建了该结构并给出了初始的阈值。也即滚动条所停留在的值。和最大的阈值255. 在on_trackbar(0);则调用了滚动条的函数。即你修改滚动条的值,则进入该函数 */
openCV轮廓
最新推荐文章于 2025-02-20 20:40:06 发布