图像掩膜,用选定的图像、图形或物体,对处理的图像(所有或局部)进行遮挡,来控制图像处理的区域或处理过程。
掩膜是一种图像滤镜的模板,实用掩膜常常处理的是遥感图像。当提取道路或者河流,或者房屋时,经过一个n*n的矩阵来对图像进行像素过滤,而后将咱们须要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。函数
①提取感兴趣区,用预先制做的感兴趣区掩模与待处理图像相乘,获得感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
②屏蔽做用,用掩模对图像上某些区域做屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区做处理或统计。
③结构特征提取,用类似性变量或图像匹配方法检测和提取图像中与掩模类似的结构特征。
④特殊形状图像的制做。code
简单示例对象
void OpenCVTest2() { Mat src,dst; src = imread("D:/1.jpg"); namedWindow("test",CV_WINDOW_AUTOSIZE); imshow("test", src); int rows = src.rows; int cols = (src.cols - 1) * src.channels(); int offset = src.channels(); dst = Mat::zeros(src.size(), src.type()); //掩膜处理原理 for (int row = 1; row < rows - 1; ++row) { const uchar* pre = src.ptr<uchar>(row - 1); const uchar* cur = src.ptr<uchar>(row); const uchar* next = src.ptr<uchar>(row + 1); uchar* dst_cur = dst.ptr<uchar>(row); for (int col = offset; col < cols - 1; ++col) { dst_cur[col] = saturate_cast<uchar>( 5 * cur[col] - (cur[col - offset] + cur[col + offset] + pre[col] + next[col])); } } //Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);// 定义一个掩膜对象 //filter2D(src, dst, src.depth(), kernel);//filter2D 就是掩膜处理函数 namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output", dst); waitKey(0); }