感性认识为:画图板的填充工具和photoshop的容差索套工具混合而成的一个工具
函数原型:
CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point,
CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),
CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),
CvConnectedComp* comp CV_DEFAULT(NULL),
int flags CV_DEFAULT(4),
CvArr* mask CV_DEFAULT(NULL));
image图像名称;
seed_point从哪一点开始涂色;
new_val涂上的新颜色;
up_diff,lo_diff上下容差;
测试用图:
程序代码:
#include <highgui.h>
#include<cv.h>
using namespace std;
int main()
{
IplImage *img_in = cvLoadImage("test.jpg",3);
IplImage *img_out =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
cvNamedWindow("img_in",CV_WINDOW_AUTOSIZE);
cvShowImage("img_in",img_in);
cvCopy(img_in,img_out);
cvFloodFill(img_out,cvPoint(200,50),cvScalar(34,180,238),cvScalarAll(10),cvScalarAll(10));
cvFloodFill(img_out,cvPoint(80,330),cvScalar(34,180,238),cvScalarAll(20),cvScalarAll(10));
cvFloodFill(img_out,cvPoint(170,500),cvScalar(34,180,238),cvScalarAll(20),cvScalarAll(10));
cvFloodFill(img_out,cvPoint(500,600),cvScalar(34,180,238),cvScalarAll(50),cvScalarAll(50));
cvFloodFill(img_out,cvPoint(0,0),cvScalar(230,224,176),cvScalarAll(20),cvScalarAll(20));
cvFloodFill(img_out,cvPoint(500,0),cvScalar(230,224,176),cvScalarAll(20),cvScalarAll(20));
cvFloodFill(img_out,cvPoint(150,550),cvScalar(230,224,176),cvScalarAll(20),cvScalarAll(20));
cvFloodFill(img_out,cvPoint(140,600),cvScalar(230,224,176),cvScalarAll(20),cvScalarAll(20));
cvFloodFill(img_out,cvPoint(330,320),cvScalar(181,228,255),cvScalarAll(10),cvScalarAll(5));
cvFloodFill(img_out,cvPoint(200,350),cvScalar(181,228,255),cvScalarAll(10),cvScalarAll(5));
cvNamedWindow("img_out",CV_WINDOW_AUTOSIZE);
cvShowImage("img_out",img_out);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img_in);
cvReleaseImage(&img_out);
return 0;
}
运行结果: