OpenCV学习笔记-漫水填充算法

满水填充算法需要使用的函数为:

void cvFloodFill(
IplImage* src,
CvPoint seedPoint,	//漫水法从点seedPoint开始实行算法
CvScalar newVal,	//像素点被染色的值
CvScalar loDiff = cvScalarAll(0),	//下标记--被染色的相邻点减去loDiff
CvScalar upDiff = cvScalarAll(0),	//上标记--被染色的相邻点加上upDiff
CvConnectedComp* comp = NULL,	//如果comp不是NULL,那么该CvConnectedComp被设置为被填充区域的统计属性
int flags = 4,	/*低八位可以被设置为4或者8,这个参数控制着填充算法的连通性,4表示在4个方向考虑连通性(上下左右),
*8表示在8个方向考虑连通性(加上4个对角线方向),高八位可以设置CV_FLOODFILL_FIXED_RANGE,或者
*CV_FLOODFILL_MASK_ONLY(如果设置只考虑填充MASK),flags的中间比特(8-15位)的值可以设置填充掩码的值
*flags = 8 | CV_FLOODFILL_MASK_ONLY | CV_FLOODFILL_FIXED_RANGE | (43<<8)
*/
CvArr* mask = NULL	/*mask参数与其他有mask参数的使用方法一致,不同的是可以是作为该函数的输出值(指定应经被填充的区域)
*如果mask非空,那么它必须是一个单通道,8位,像素宽度和高度均比源图像大两个像素的图像
*(这是为使内部运算简单快速),cvFloodFill()不会覆盖mask中非0的区域
*/
);

例题代码为:

#include "StdAfx.h"
#include "cv.h"
#include "highgui.h"


int main(int argc, char ** argv)
{
	cvNamedWindow("source");
	cvNamedWindow("dest1");
	cvNamedWindow("dest2");
	IplImage * src = cvLoadImage("test2.bmp");
	IplImage * img=cvCreateImage(cvGetSize(src), 8, 3);
	IplImage *img2=cvCreateImage(cvGetSize(src),8,3);
	cvCopyImage(src, img);
	cvCopyImage(src,img2);

	cvFloodFill(
		img,
		cvPoint(54,82), 
		CV_RGB(255,0,0),
		cvScalar(20,30,40,0),
		cvScalar(20,30,40,0),
		NULL,
		4,
		NULL
		);
	cvFloodFill(
		img2,
		cvPoint(88,88), 
		CV_RGB(255,0,0),
		cvScalar(20,30,40,0),
		cvScalar(20,30,40,0),
		NULL,
		4,
		NULL
		);
	cvShowImage("source",src);
	cvShowImage("dest1", img);
	cvShowImage("dest2",img2);
	cvWaitKey(0);
	cvReleaseImage(&src);
	cvReleaseImage(&img);
	cvReleaseImage(&img2);
	cvDestroyAllWindows();
	return 0;
}

例题结果为:


参考文献:

1.学习OpenCV,于仕祺,刘瑞祯,清华大学出版社,pp.146-149

2.http://blog.csdn.net/superjimmy/article/details/6181528

3.http://blog.csdn.net/cartoonface/article/details/5959861


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值