漫水填充算法

来源:互联网 发布:php网站源码带数据库 编辑:程序博客网 时间:2024/04/30 03:16


漫水填充算法是填充算法中最通用的算法。所谓漫水填充算法,是给定一个联通域内的一个点,以此为起点找到这个联通域的其余所有点并将其填充为指定颜色的一种算法。 

之所以称之为漫水填充,是因为这种算法就是模拟了涨水的过程,从一点开始,水流慢慢加大,直到漫过了全部区域。该填充算法的原型如下所示:

void cvFloodFill (

IplImage *img, 

CvPoint seedPoint, 

CvScalar newVal,

CvScalar loDiff, 

CvScalar upDiff, 

CvConnectedComp *comp, 

int flags = 4, 

CvArr *mask = NULL

)

img参数代表输入图像,漫水填充从seedPoint点开始(也称种子点),newVal是像素的被染色的值。如果一个像素点的值不低于被染色的相邻点减去 loDiff 且不高于其加上upDiff,那么该像素点就会被染色。如果参数 flags 包含CV_FLOODFILL_FIXD_RANGE,这时每个像素点将与种子点比较,而不是与相邻点比较。如果 comp 不为 NULL,那么该CvConnectedComp结构将被设置为填充区域的统计属性。flags参数有点复杂,这些参数决定着填充的连通性、相关性、是否填充掩码区域及用来填充的值。

示例代码:

#include <opencv/cv.h>
#include <opencv/highgui.h>


int main()
{
IplImage *img = cvLoadImage("F:/Images/test.jpg", 1);
cvNamedWindow("srcImage");
cvShowImage("srcImage", img);
cvWaitKey(0);
cvFloodFill(img, cvPoint(30,30), cvScalar(0,255,0),  cvScalar(20,20,20), cvScalar(20,20,20));
cvShowImage("srcImage",img);
cvWaitKey(0);

cvReleaseImage(&img);
cvDestroyWindow("srcImage");
return 0;
}

原图:


填充后图像:


原创粉丝点击