一、什么是掩模mask
OpenCV中很多函数都带有一个mask参数,mask被称为掩模。图像掩模一般用来对处理的图像(全部或者局部)进行遮挡,来控制图像处理的区域或处理过程。
二、掩模原理
掩模一般是小于等于源图像的单通道矩阵,掩模中的值分为两种0和非0。以Mat::copyTo为例,当mask的值不为0,则将源图像拷贝到目标图像,当mask为0,则不进行拷贝,目标图像保持不变。
源图像 目标图像 mask 源图像拷贝叠加到目标图像上得到新的目标图像
100 30 55 50 220 210 0 0 0 50 220 210
20 180 88 99 77 12 255 255 255 20 180 88
33 28 110 92 110 115 255 255 255 33 28 110
三、示例
1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using namespace cv; 5 using namespace std; 6 7 8 int main(int argc, char** argv) 9 { 10 Mat src = imread("test.jpg"); 11 Mat src1 = src.clone(); 12 Mat dst, edge, gray; 13 14 dst.create(src1.size(), src1.type()); 15 dst = Scalar::all(0); 16 17 cvtColor(src1, gray, COLOR_BGR2GRAY); 18 19 blur(gray, edge, Size(3, 3)); 20 21 Canny(edge, edge, 3, 9, 3); 22 23 //掩膜的存在使得只有边缘部分被copy 24 src1.copyTo(dst, edge); 25 26 imshow("效果图", dst); 27 28 waitKey(0); 29 return 0; 30 31 }