漫水填充算法

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

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

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;
}

原图:

填充后图像:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值