掩膜的介绍
掩膜就像一个挡板,对目标图像的部分或全部区域进行遮挡。从矩阵角度看,掩膜与目标图像进行与运算,掩膜值为0处对应的像素点的代表遮挡,1代表显示。
漫水填充
功能:把和种子点连通且颜色亮度相近的区域染成同一颜色。
int floodFill(InputOutputArray image,
InputOutputArray mask,
Point seedPoint,
Scalar newVal,
Rect* rect = 0,
Scalar loDiff = Scalar(),
Scalar upDiff = Scalar(),
int flags = 4);
参数详解:
- 第一个参数:输入图像。
- 第二个参数:操作掩膜。
- 第三个参数:漫水填充算法的起始点。
- 第四个参数:像素点被重新染色的值。
- 第五个参数:设置重绘区域的最小边界矩形区域。默认为0。
- 第六个参数:| 邻近区域的点的灰度(或颜色) - 种子点的灰度(或颜色)| 负差的最大值。
- 第七个参数:正差最大值。
- 第八个参数:可以用一个矩形把连通的区域框起来。
FLOODFILL_FIXED_RANGE //int 4 4连通
FLOODFILL_MASK_ONLY //int 8 8连通
可以注意到,floodFill函数没有输出图像,直接对输入图像进行操作。
mask掩膜,初始为元素全为0的矩阵
0代表该像素对应的原图像不显示,被涂上颜色
1代表该像素对应的原图像显示
实例分析
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat src, mask, dst;
src = imread("E://Study//RoboMaster//resource//1.jpg", 1);
//输出长宽,图像深度
printf("%d", src.cols);
printf("%d", src.rows);
//mask未初始大小
if (!src.data)
{
printf("Error!!!");
return false;
}
floodFill(src, mask, Point(50, 100), Scalar(155, 255, 55), 0, Scalar(20, 20, 20), Scalar(20, 20, 20), 4);
namedWindow("result", WINDOW_AUTOSIZE);
imshow("result", src);
waitKey(0);
}