OpenCV mask的作用及如何制作掩模mask
Fshinech 人气:0前言
OpenCV中的很多函数用到mask,mask是什么?怎么作一个mask?将是本文的主要内容。
一、mask是什么?
mask 不是马斯克,是掩膜,可以用来遮盖非感兴趣区,突出感兴趣区,使得图像处理只专注于ROI部分。
二、OpenCV生成mask的几种方法
注意:mask最终需要与要作用到的输入图像的尺寸与类型保持一致
矩形
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("img1.png", IMREAD_GRAYSCALE); imshow("src", src); // 定义mask,大小640*480,像素全0 Mat mask = cv::Mat::zeros(Size(640, 480), CV_8UC1); // 作一个从坐标(220,120),宽200,高200的矩形框,框内填充白色,从方法1,2,3中任选一 // 方法1 rectangle(mask, cv::Rect(220, 120, 200, 200), Scalar(255), -1); // 方法2 mask(cv::Rect(320, 50, 240, 310)) = 255; // 方法3 mask(cv::Rect(320, 50, 240, 310)).setTo(255); Mat dst; // 将src中对应对应掩膜ROI中区域拷贝到dst src.copyTo(dst, mask); imshow("mask",mask); imshow("dst", dst); waitKey(); return 0; }
运行结果如下:
src
mask
dst
圆形
同理
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("img1.png", IMREAD_GRAYSCALE); // 定义mask,大小640*480,像素全0 Mat mask = cv::Mat::zeros(Size(640, 480), CV_8UC1); // 作一个以点坐标(320,50)为圆心,150为半径的圆,圆内填充白色 circle(mask, Point(440, 205), 150, Scalar(255),-1); Mat dst; // 将src中对应对应掩膜ROI中区域拷贝到dst src.copyTo(dst, mask); imshow("mask",mask); imshow("dst", dst); waitKey(); return 0; }
mask
dst
mask可以是各种形状,各式各样,方法也有很多,这里只略举一二。
总结
定义mask,设置ROI,将ROI内部填充白色,其他填充黑色,即可对ROI区域操作,遮盖其他区域。也可以将mask反转,遮盖矩形框内数据,处理框外数据。
加载全部内容