与蒙版种子点相同的连通分量中的所有零值像素都将替换为您指定的值。该值必须添加到flags
参数,左移8位:
uchar fillValue = 128;
cv::floodFill(img, mask, seed, cv::Scalar(255) ,0, cv::Scalar(), cv::Scalar(), 4 | cv::FLOODFILL_MASK_ONLY | (fillValue << 8));
下面是一个简单但也许具有启发性的例子。像这样创建图像:
//Create simple input image
cv::Point seed(4,4);
cv::Mat img = cv::Mat::zeros(100,100,CV_8UC1);
cv::circle(img, seed, 20, cv::Scalar(128),3);
在此图像中的结果:
然后,创建一个蒙版并对其进行洪水填充:
//Create a mask from edges in the original image
cv::Mat mask;
cv::Canny(img, mask, 100, 200);
cv::copyMakeBorder(mask, mask, 1, 1, 1, 1, cv::BORDER_REPLICATE);
//Fill mask with value 128
uchar fillValue = 128;
cv::floodFill(img, mask, seed, cv::Scalar(255) ,0, cv::Scalar(), cv::Scalar(), 4 | cv::FLOODFILL_MASK_ONLY | (fillValue << 8));
给出这个结果:
掩模中的白色像素是边缘检测的结果,而灰色像素是洪水填充的结果。
UPDATE:响应评论,标记值4
指定用于比较颜色值差异的像素邻域。从文档中:
较低位包含函数内使用的连接值 4(默认)或 8。连接性决定了考虑像素的哪些邻居。
当。。。的时候cv::FLOODFILL_MASK_ONLY
标志未通过,both图像和掩码已更新,但洪水填充将在任何非零掩码值处停止。