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

来源:互联网 发布:万方数据库检索方法 编辑:程序博客网 时间:2024/05/16 12:50

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

void cvFloodFill(IplImage* src,CvPoint seedPoint,//漫水法从点seedPoint开始实行算法CvScalar newVal,//像素点被染色的值CvScalar loDiff = cvScalarAll(0),//下标记--被染色的相邻点减去loDiffCvScalar upDiff = cvScalarAll(0),//上标记--被染色的相邻点加上upDiffCvConnectedComp* 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


原创粉丝点击