実際に使ってみてはまったトラップ【その1】:
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
dst[y*width + x] = tmp[(height -y -1)*width+x];
}
}
みたいな感じで誤魔化し中。。。
実際に使ってみてはまったトラップ【その2】:
井村氏のラベリングは黒画素の部分を無視して白画素の部分を対象にラベリングする。
そのため黒画素の部分に対してはラベリング情報が得られない。
つまり、黒画素の部分にlabeling.GetNumOfRegions()は黒背景の白物体だったとしても
領域数2ではなく、領域数1と判定される。また、白物体を対象なので黒物体のラベリングをしたいときは
cvNot()を使って反転させないといけない。
実際に使ってみてはまったトラップ【その3】:
ラベリングできなかったものは領域番号0に格納される。つまり、実際の領域を追うには1から調べる必要
があった。labeling.GetNumOfResultRegions()は領域数2個で未分類1個[ラベリング番号0]でも
2を表示するが、labeling.GetResultRegionInfo(int変数)は1個目の領域[領域番号1]が0番目、
2個目の領域[領域番号2]が1番目になるので注意。
その他(ラベリングの隣接情報を取得するにはどうすればいいか考察。):
3*3のパターンを走査させてそのブロック内で異なるラベリング番号が現れたら、その番号は隣接している
と考えるのはどうか?
for(int y = 1; y < height - 1; y++) {
for(int x = 1; x < height -1; x++) {
if(8方向比較で異なるラベリング値) 配列に異なる2つのラベリング値格納。
}
}
といったような感じ。
最終更新:2011年04月03日 18:53