基于漫水填充法的二值图像封闭孔洞填充

来源:互联网 发布:win10有线未识别的网络 编辑:程序博客网 时间:2024/04/29 15:24

将大背景全部用前景色(白色)填充(cvFloodFill函数,一(0,0)为种子点即可),即得到孔洞图(此时孔洞用为黑色),然后将此图二值反转,即得到用白色表示的孔洞图,然后将此空洞图与原二值图相加(使用cvAdd函数即可)即可将孔洞填充掉。

只对封闭孔洞有效

/**************************************************************//*               基于漫水填充的二值图像的封闭孔洞填充         *//* 思路:用白色填充整个背景区域,得到的孔洞为黑色。           *//* 反转后得到白色的孔洞,与原二值图像相加得到填充后的图像。   *//**************************************************************/void fillhole(IplImage *input,IplImage *output){IplImage *input_copy=cvCreateImage(cvGetSize(input),input->depth,1);cvCopy(input,input_copy);char *Pointer;for(int y=0;y<input_copy->height;y++){Pointer=input_copy->imageData+y*input_copy->widthStep;if(Pointer[0]==0)cvFloodFill(input_copy,cvPoint(0,y),cvScalarAll(255));if(Pointer[input_copy->width-1]==0)cvFloodFill(input_copy,cvPoint(input_copy->width,y),cvScalarAll(255));}for(int x=0;x<input_copy->width;x++){Pointer=input_copy->imageData+x;if(Pointer[0]==0)cvFloodFill(input_copy,cvPoint(x,0),cvScalarAll(255));if(Pointer[input_copy->height-1]==0)cvFloodFill(input_copy,cvPoint(x,input_copy->height-1),cvScalarAll(255));}cvNot(input_copy,input_copy);cvAdd(input,input_copy,output,NULL);}

实验结果:



0 0
原创粉丝点击