トップページ -> 実践知識 -> OpenCV の使用法 -> 2値画像の領域を違う色で塗り分ける
[サイトマップへ]  

2値画像の領域を違う色で塗り分ける

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

Web ページ http://opencv.jp/opencv-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