2値画像の領域を違う色で塗り分ける
Web ページ: https://opencv.orgopencv-2svn/cpp/structural_analysis_and_shape_descriptors.html で公開されていたプログラムを少し変更
#include "cv.h" #include "highgui.h" using namespace cv; int main( int argc, char** argv ) { Mat src; // コマンドライン引数の 1 番目に 2 値画像(白黒) // のファイル名を与えてください. 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> contours; vector hierarchy; findContours( src, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); // トップレベルにあるすべての輪郭を横断し, // 各連結成分をランダムな色で描きます. int idx = 0; for( ; idx >= 0; idx = hierarchy[idx][0] ) { Scalar color( rand()&255, rand()&255, rand()&255 ); drawContours( dst, contours, idx, color, CV_FILLED, 8, hierarchy ); } namedWindow( "Components", 1 ); imshow( "Components", dst ); waitKey(0); }
g++ -o a.out hoge.cc -I/usr/local/include/opencv2 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_highgui -lopencv_imgproc -lopencv_core