它是一种用特定的颜色填充连通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。常被用来标记或分离图像的一部分,以便对图像进一步处理和分析,也可以用来从输入图像中获取掩码区域,或只处理掩码区域制定的像素点,操作结果总是某个连续的区域。
int cv::floodFill | ( | InputOutputArray | image, |
InputOutputArray | mask, //它是一个单通道8位,长宽都比输入图像大两个像素点的图像 | ||
Point | seedPoint, //漫水填充的起始点 | ||
Scalar | newVal, //像素点被染色的值,即在重绘区域像素的新值 | ||
Rect * | rect = 0 , //可选参数,用于设置floodfill函数将要重绘区域的最小边界矩形区域 | ||
Scalar | loDiff = Scalar() , | ||
Scalar | upDiff = Scalar() , | ||
int | flags = 4 | ||
) |
代码:
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
void test01()
{
Mat srcimg = imread("C:/Users/Administrator/Desktop/3.png");
namedWindow("原图");
imshow("原图", srcimg);
Rect ccomp;
/*
floodFill(原图,掩膜,漫水填充起始点,像素点被渲染的值,用于设置floodfill函数将要重绘
区域的最小边界矩形区域,当前观察像素值与其部件邻域像素值或加入该部件的种子像素之前的亮度或颜色之负差的最大值,
)
*/
floodFill(srcimg, Point(150, 200), Scalar(255, 255, 255), &ccomp, Scalar(5, 5, 5), Scalar(20, 20, 40));
imshow("效果图", srcimg);
waitKey(0);
}
int main()
{
test01();
system("pause");
return 0;
}
结果展示: