cvBlobを使ってみる

http://code.google.com/p/cvblob/
二値画像のラベリングや重心などの特徴抽出が行えるOpenCV用のライブラリcvBlobを使ってみる。
ダウンロードして、ファイル(cvblob.h, cvblob.cpp and cvlabel.cpp)を自分のプロジェクトに加えるだけで使える。

とりあえずサンプルを少し変えて動かしてみた。

ソースコード

#include <cv.h>
#include <highgui.h>
#include "cvblob.h"

int main(void)
{
  IplImage *img = cvLoadImage("test.png", 1);

  cvThreshold(img, img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

  IplImage *chB = cvCreateImage(cvGetSize(img), 8, 1);

  cvSplit(img, chB, NULL, NULL, NULL);

  IplImage *labelImg = cvCreateImage(cvGetSize(img), IPL_DEPTH_LABEL, 1);

  CvBlobs blobs;
  unsigned int result = cvLabel(chB, labelImg, blobs);

  cvRenderBlobs(labelImg, blobs, img, img);

  cvNamedWindow("test", 1);
  cvShowImage("test", img);
  cvWaitKey(0);
  cvDestroyWindow("test");

  cvSaveImage("blob.jpg", img);

  cvReleaseImage(&chB);
  cvReleaseImage(&labelImg);
  cvReleaseImage(&img);

  return 0;
}

・入力画像

・実行結果