井村先生のラベリングクラスを使って、面積が7以上の領域の情報を得ようとしています
しかし実際にプログラムを動かしてみると、明らかに情報を得られた領域が少ないのです
(画像中の面積7以上の領域を実際に数えてみると100個以上あるのに、10個ぐらいしか情報が得られていない)
プログラムの何処がおかしいのか教えていただけるでしょうか?
以下、関係のありそうな部分を残して、一部省略したソースです
int main (int argc, char **argv){
int line = 0;
short *dst;
LabelingBS labeling;
RegionInfoBS *ri;
ri = labeling.GetResultRegionInfo( 0 );
IplImage *src_img, *dst_img, *dst_img2;
IplImage *tmp_img;
// 画像の読み込み
if (argc != 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
tmp_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_16S, 1);
dst_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);
// Cannyによるエッジ画像の作成
cvCanny (src_img, dst_img, 50.0, 200.0);
// 出力用画像領域の確保を行なう
dst_img2 = cvCreateImage (cvSize (dst_img->width * 2, dst_img->height), dst_img->depth, dst_img->nChannels);
// 画像のサイズ変更を行う
cvResize (dst_img, dst_img2,CV_INTER_AREA);
//dst_img2のx位置2nを黒にする
for(line = 0; line <= dst_img2->width ; line++ ){
cvLine(dst_img2,cvPoint(2*line,0),cvPoint(2*line, dst_img->height),CV_RGB(0,0,0),1,4,0);
}
//ラベリング
dst = new short[ dst_img2->width * dst_img2->height ];
labeling.Exec((uchar*)dst_img2, dst ,dst_img2->height,dst_img2->width,true,6);
//ラベリングの領域情報
for(int i = 0;i < labeling.GetNumOfResultRegions(); i++){
RegionInfoBS *ri = labeling.GetResultRegionInfo( i );
cout << "-------------------------------" << endl;
cout << "領域ナンバー:" << ri->GetResult() << endl;
cout << "画素数:" << ri->GetNumOfPixels() << endl;
}
cout << "-------------------------------" << endl;
cout << "領域の総数:" << labeling.GetNumOfRegions() << endl;
cout << "面積が指定の画素以上の領域数:" << labeling.GetNumOfResultRegions() << endl;