mirror of
https://github.com/opencv/opencv.git
synced 2024-11-27 12:40:05 +08:00
40 lines
1.0 KiB
C++
40 lines
1.0 KiB
C++
#include "opencv2/imgproc.hpp"
|
|
#include "opencv2/highgui.hpp"
|
|
|
|
using namespace cv;
|
|
using namespace std;
|
|
|
|
int main( int argc, char** argv )
|
|
{
|
|
Mat src;
|
|
// the first command-line parameter must be a filename of the binary
|
|
// (black-n-white) image
|
|
if( argc != 2 || !(src=imread(argv[1], 0)).data)
|
|
return -1;
|
|
|
|
Mat dst = Mat::zeros(src.rows, src.cols, CV_8UC3);
|
|
|
|
src = src > 1;
|
|
namedWindow( "Source", 1 );
|
|
imshow( "Source", src );
|
|
|
|
vector<vector<Point> > contours;
|
|
vector<Vec4i> hierarchy;
|
|
|
|
findContours( src, contours, hierarchy,
|
|
RETR_CCOMP, CHAIN_APPROX_SIMPLE );
|
|
|
|
// iterate through all the top-level contours,
|
|
// draw each connected component with its own random color
|
|
int idx = 0;
|
|
for( ; idx >= 0; idx = hierarchy[idx][0] )
|
|
{
|
|
Scalar color( rand()&255, rand()&255, rand()&255 );
|
|
drawContours( dst, contours, idx, color, FILLED, 8, hierarchy );
|
|
}
|
|
|
|
namedWindow( "Components", 1 );
|
|
imshow( "Components", dst );
|
|
waitKey(0);
|
|
}
|