輪郭の追跡で無限ループに陥る
Posted: 2011年8月06日(土) 07:04
カメラから取得した画像でリアルタイムに画像処理を加える(輪郭を青で描く)ためにプログラムを組んだのですが、2秒くらい正常にうごいた後に固まってしまいます。
ブレークポイントなどをおいてみると輪郭追跡のループで無限ループになってしまっているようです
輪郭追跡は
http://homepage2.nifty.com/tsugu/sotuken/binedge/
を参考に作りました。
動作環境は
VisualC++ 2008
CPU:corei5
メモリ:8GB
ブレークポイントなどをおいてみると輪郭追跡のループで無限ループになってしまっているようです
輪郭追跡は
http://homepage2.nifty.com/tsugu/sotuken/binedge/
を参考に作りました。
動作環境は
VisualC++ 2008
CPU:corei5
メモリ:8GB
/*以下質問用の参考事項
int rdata[320][240]には0または1があります
輪郭はrdataの値は変えずに画像の情報だけをかえています
c_width=320,c_height=240です*/
//画像内を捜査し有効画素を探す
for(int i=0; i< c_height; i++) {
for(int j=0; j < c_width; j++) {
//有効画素があった場合輪郭追跡に入る
if(rdata[i][j]!=0) {
/*輪郭追跡*/
//追跡用初期化
sx=i;sy=j;px=sx;py=sy;
DrawPixelSoftImage(Redcap,sx,sy,0,0,255,0);
vec=2;IsFirst=1;
//追跡開始点と追跡点が同じ座標なるまで輪郭追跡処理
while( px != sx || py != sy || IsFirst == 1 ) {
switch(vec) {
case 0: //左上を調査
if( rdata[px-1][py-1]!= 0 ) {
DrawPixelSoftImage(Redcap,px-1,py-1,0,0,255,0);
px--; py--;
vec = 6;
break;
}
case 1: //左を調査
if( rdata[px-1][py]!= 0 ) {
DrawPixelSoftImage(Redcap,px-1,py,0,0,255,0);
px--;
vec = 0;
break;
}
case 2: //左下を調査
if( rdata[px-1][py+1]!= 0 ) {
DrawPixelSoftImage(Redcap,px-1,py+1,0,0,255,0);
px--; py++;
IsFirst = 0;
vec = 0;
break;
}
case 3: //下を調査
if( rdata[px][py+1]!= 0 ) {
DrawPixelSoftImage(Redcap,px,py+1,0,0,255,0);
py++;
IsFirst = 0;
vec = 2;
break;
}
case 4: //右下を調査
if( rdata[px+1][py+1]!= 0 ) {
DrawPixelSoftImage(Redcap,px+1,py+1,0,0,255,0);
px++; py++;
IsFirst = 0;
vec = 2;
break;
}
case 5: //右を調査
if( rdata[px+1][py]!= 0 ) {
DrawPixelSoftImage(Redcap,px+1,py,0,0,255,0);
px++;
IsFirst = 0;
vec = 4;
break;
}
else {
//孤立点であった場合
if( IsFirst == 1 ) {
IsFirst = 0;
break;
}
}
case 6: //右上を調査
if( rdata[px+1][py-1]!= 0 ) {
DrawPixelSoftImage(Redcap,px+1,py-1,0,0,255,0);
px++; py--;
vec = 4;
break;
}
case 7: //上を調査
if(rdata[px][py-1]!= 0 ) {
DrawPixelSoftImage(Redcap,px,py-1,0,0,255,0);
py--;//px=px
vec = 6;
break;
}
vec = 0;
}
}
break;
}
}
}