OpenCV:mask的作用,如何制作掩模mask


前言

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反转,遮盖矩形框内数据,处理框外数据。

  • 16
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: OpenCV 支持在图像上使用多个掩码。掩码可以用来控制图像上的操作,如缩放、剪切等。使用多个掩码可以在同一张图像上进行不同的操作,以获得更精细的控制。例如,您可以使用一个掩码对图像进行缩放,再使用另一个掩码对图像进行剪切。在 OpenCV 中,您可以通过函数 cv2.bitwise_and() 或 cv2.bitwise_or() 等来实现多个掩码的使用。 ### 回答2: 在OpenCV中,我们可以使用多个掩模mask)来处理图像。 掩模是一个与原始图像具有相同大小的二进制图像,其中一些像素被标记为1,表示应该处理的区域,另一些像素被标记为0,表示应该忽略的区域。 在处理多个掩模时,我们可以使用逻辑运算符(如AND、OR、XOR)来组合它们,从而获得我们想要的结果。 例如,如果我们有两个掩模A和B,我们可以使用逻辑AND运算符将它们组合起来,得到一个新的掩模: cv2.bitwise_and(A, B, dst_mask) 这将使用A和B的逐个像素进行逻辑AND运算,生成一个新的掩模dst_mask。 类似地,我们可以使用逻辑OR运算符将两个掩模组合起来: cv2.bitwise_or(A, B, dst_mask) 这将使用A和B的逐个像素进行逻辑OR运算,生成一个新的掩模dst_mask。 我们还可以使用逻辑XOR运算符将两个掩模组合起来: cv2.bitwise_xor(A, B, dst_mask) 这将使用A和B的逐个像素进行逻辑XOR运算,生成一个新的掩模dst_mask。 通过使用多个掩模,我们可以更灵活地处理图像,根据需要选择不同的区域进行处理。这在图像分割、对象检测等任务中非常有用。 总结而言,OpenCV中的多个掩模允许我们使用逻辑运算符组合它们,以便根据需要对图像进行区域选择和处理。 ### 回答3: OpenCV是一个广泛使用的计算机视觉库,在处理图像和视频时非常有用。在OpenCV中,可以使用多个掩模mask)来改变或限制对图像的操作。 多个掩模可能包括不同的形状和大小,用于选择图像的特定区域。例如,可以使用矩形、圆形或多边形的掩模来指定要处理的特定区域。 使用OpenCV的函数可以将掩模应用于图像上的任意位置。掩模作为一个矩阵,与输入图像具有相同的尺寸。通过将掩模的元素设置为非零值,可以选择要处理的像素。 在处理图像时,可以在图像上使用多个掩模。这样可以将不同的操作应用于不同的区域。例如,可以使用一个掩模来检测和处理图像中的人脸,使用另一个掩模来检测和处理图像中的车辆。 要使用多个掩模,可以首先创建一个与原始图像相同尺寸和数据类型的空白图像。然后,可以在空白图像上使用不同的掩模进行操作,将结果存储在相应的位置上。 使用多个掩模时,还可以通过将它们组合在一起来创建更复杂的选择。这可以通过逻辑运算(如AND、OR和NOT)来实现,以指定在哪些区域应用某个掩模。 总之,OpenCV允许我们在图像处理过程中使用多个掩模。这些掩模可以用于选择特定区域,并对这些区域进行不同的操作。通过灵活使用掩模,可以实现更精确和有针对性的图像处理
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fshinech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值