此案例位于CXCORE中cvDrawContours函数介绍部分给出。此程序首先载入一个二值图像文件,然后使用函数再次二值化确认。接着使用cvFindContours找到轮廓,然后使用填充方式绘制轮廓线内部区域,由此得到的彩色区域便是联连通区域。其中,黑色是0值区域,彩色区域便是连通区域。连通区域的色彩是使用随机数生成的。
- // bwlabel.cpp
- #include <cv.h>
- #include <highgui.h>
- int main( int argc, char** argv)
- {
- IplImage* src;
- // 第一个命令行参数必须是二进制(黑色 - n-white)图像的文件名
- if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0)
- {
- IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3 );
- CvMemStorage* storage = cvCreateMemStorage(0);
- CvSeq* contour = 0;
- cvThreshold( src, src, 1, 255, CV_THRESH_BINARY );
- cvNamedWindow( "Source", 1 );
- cvShowImage( "Source", src );
- cvFindContours( src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );
- cvZero( dst );
- for( ; contour != 0; contour = contour->h_next )
- {
- CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
- /* 用1替换CV_FILLED以查看轮廓 */
- cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 );
- }
- cvNamedWindow( "Components", 1 );
- cvShowImage( "Components", dst );
- cvWaitKey(0);
- }
- return 0;
- }
在OpenCV 1.1、VC6.0编译运行通过。实验过程如下:
1. 选择OpenCV sample/c中的一个二值图像。
2. 运行中输入cmd,使用命令行进入程序编译结果debug文件夹(即exe所在目录),将图片文件放入此文件夹。
3. 使用命令,运行程序:bwlabel pic1.png