欢迎来到天天文库
浏览记录
ID:11373747
大小:22.00 KB
页数:3页
时间:2018-07-11
《8-邻域边界跟踪算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++利用点的八邻域信息,选择下一个点作为边界点,这个算法需要选择一个开始点,可以选择图像上是目标点,在最上,最左的点。然后查看它的八邻域的点,从右下方45°的位置开始寻找,如果是目标点,将沿顺时针90°作为下一次寻找的方向,如果不是,则逆时针45°继续寻找,一旦找到重复上面的过程。voidVessDibTrack(HDIBhdib,vector&pt)//八邻域{unsignedchar*lpSrc;LPSTRlpDIB=(LPSTR)::GlobalLock((HGLOBAL)hdib);intcxDIB=(int)::D
2、IBWidth(lpDIB);//SizeofDIB-xintcyDIB=(int)::DIBHeight(lpDIB);//SizeofDIB-yLPSTRlpDIBBits=::FindDIBBits(lpDIB);longlLineBytes=WIDTHBYTES(cxDIB*8);//计算图像每行的字节数//寻找开始点,最右,最下//先行,后列inti,j;POINTstartPt,currPt;for(i=0;i3、its+lLineBytes*(cyDIB-1-i)+j;if(*lpSrc==0)//是黑点{startPt.x=i;startPt.y=j;//停止条件i=cyDIB;j=cxDIB;}}}//设置方向数组//intdirection[8][2]={{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};intdirection[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};intstartDirect;B4、OOLFindStartPoint=FALSE;BOOLFindPoint=FALSE;//开始跟踪currPt.x=startPt.x;currPt.y=startPt.y;POINTNextPt;intNextPtValue;startDirect=0;intcnt=0;while(!FindStartPoint&&cnt<100000){FindPoint=FALSE;pt.push_back(currPt);while(!FindPoint){//沿预定方向扫描,寻找下一个点NextPt.x=currPt.x+direction[s5、tartDirect][1];NextPt.y=currPt.y+direction[startDirect][0];lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(cyDIB-1-NextPt.x)+NextPt.y;//NextPtValue=GetPiexValue(hdib,NextPt.x,NextPt.y);NextPtValue=*lpSrc;if(NextPtValue==0&&NextPt.x>=0&&NextPt.x=0&&NextPt.y6、B){FindPoint=TRUE;currPt.x=NextPt.x;currPt.y=NextPt.y;if(currPt.x==startPt.x&&currPt.y==startPt.y){FindStartPoint=TRUE;}startDirect=startDirect-2;if(startDirect<0)startDirect=startDirect+8;}else{startDirect=startDirect+1;if(startDirect>=8)startDirect=startDirect-8;}}cnt++;7、}::GlobalUnlock((HGLOBAL)hdib);}
3、its+lLineBytes*(cyDIB-1-i)+j;if(*lpSrc==0)//是黑点{startPt.x=i;startPt.y=j;//停止条件i=cyDIB;j=cxDIB;}}}//设置方向数组//intdirection[8][2]={{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};intdirection[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};intstartDirect;B
4、OOLFindStartPoint=FALSE;BOOLFindPoint=FALSE;//开始跟踪currPt.x=startPt.x;currPt.y=startPt.y;POINTNextPt;intNextPtValue;startDirect=0;intcnt=0;while(!FindStartPoint&&cnt<100000){FindPoint=FALSE;pt.push_back(currPt);while(!FindPoint){//沿预定方向扫描,寻找下一个点NextPt.x=currPt.x+direction[s
5、tartDirect][1];NextPt.y=currPt.y+direction[startDirect][0];lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(cyDIB-1-NextPt.x)+NextPt.y;//NextPtValue=GetPiexValue(hdib,NextPt.x,NextPt.y);NextPtValue=*lpSrc;if(NextPtValue==0&&NextPt.x>=0&&NextPt.x=0&&NextPt.y6、B){FindPoint=TRUE;currPt.x=NextPt.x;currPt.y=NextPt.y;if(currPt.x==startPt.x&&currPt.y==startPt.y){FindStartPoint=TRUE;}startDirect=startDirect-2;if(startDirect<0)startDirect=startDirect+8;}else{startDirect=startDirect+1;if(startDirect>=8)startDirect=startDirect-8;}}cnt++;7、}::GlobalUnlock((HGLOBAL)hdib);}
6、B){FindPoint=TRUE;currPt.x=NextPt.x;currPt.y=NextPt.y;if(currPt.x==startPt.x&&currPt.y==startPt.y){FindStartPoint=TRUE;}startDirect=startDirect-2;if(startDirect<0)startDirect=startDirect+8;}else{startDirect=startDirect+1;if(startDirect>=8)startDirect=startDirect-8;}}cnt++;
7、}::GlobalUnlock((HGLOBAL)hdib);}
此文档下载收益归作者所有