aihot  2017-06-01 20:50:19  OpenCV |   查看评论   

 此案例位于CXCORE中cvDrawContours函数介绍部分给出。此程序首先载入一个二值图像文件,然后使用函数再次二值化确认。接着使用cvFindContours找到轮廓,然后使用填充方式绘制轮廓线内部区域,由此得到的彩色区域便是联连通区域。其中,黑色是0值区域,彩色区域便是连通区域。连通区域的色彩是使用随机数生成的。

  1. // bwlabel.cpp
  2. #include <cv.h>
  3. #include <highgui.h>
  4. int main( int argc, char** argv)
  5. {
  6.     IplImage* src;
  7.     // 第一个命令行参数必须是二进制(黑色 - n-white)图像的文件名
  8.     if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0)
  9.     {
  10.         IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3 );
  11.         CvMemStorage* storage = cvCreateMemStorage(0);
  12.         CvSeq* contour = 0;
  13.   
  14.         cvThreshold( src, src, 1, 255, CV_THRESH_BINARY );
  15.         cvNamedWindow( "Source", 1 );
  16.         cvShowImage( "Source", src );
  17.   
  18.         cvFindContours( src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );
  19.         cvZero( dst );
  20.   
  21.         for( ; contour != 0; contour = contour->h_next )
  22.         {
  23.             CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
  24.             /* 用1替换CV_FILLED以查看轮廓 */
  25.             cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 );
  26.         }
  27.   
  28.         cvNamedWindow( "Components", 1 );
  29.         cvShowImage( "Components", dst );
  30.         cvWaitKey(0);
  31.     }
  32. return 0;
  33. }

 在OpenCV 1.1、VC6.0编译运行通过。实验过程如下:

1. 选择OpenCV sample/c中的一个二值图像。

2. 运行中输入cmd,使用命令行进入程序编译结果debug文件夹(即exe所在目录),将图片文件放入此文件夹。

3. 使用命令,运行程序:bwlabel pic1.png

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV编程案例:使用轮廓函数检测连通区域

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]