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; }