服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - OpenCV mask的作用及如何制作掩模mask

OpenCV mask的作用及如何制作掩模mask

2023-03-09 15:52Fshinech C/C++

mask 不是马斯克,是掩膜,可以用来遮盖非感兴趣区,突出感兴趣区,使得图像处理只专注于ROI部分,OpenCV中的很多函数用到mask,mask是什么?怎么制作一个mask?本文给大家分享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;
}

运行结果如下:

OpenCV mask的作用及如何制作掩模mask

src

OpenCV mask的作用及如何制作掩模mask

mask

OpenCV mask的作用及如何制作掩模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;
}

OpenCV mask的作用及如何制作掩模mask

mask

OpenCV mask的作用及如何制作掩模mask

dst

mask可以是各种形状,各式各样,方法也有很多,这里只略举一二。

 

总结

定义mask,设置ROI,将ROI内部填充白色,其他填充黑色,即可对ROI区域操作,遮盖其他区域。也可以将mask反转,遮盖矩形框内数据,处理框外数据。

到此这篇关于OpenCV mask的作用及如何制作掩模mask的文章就介绍到这了,更多相关OpenCV mask掩模内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_42286660/article/details/124542309

延伸 · 阅读

精彩推荐
  • C/C++C++实现LeetCode(676.实现神奇字典)

    C++实现LeetCode(676.实现神奇字典)

    这篇文章主要介绍了C++实现LeetCode(676.实现神奇字典),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang12392021-12-14
  • C/C++OpenCV实现透视变换矫正

    OpenCV实现透视变换矫正

    这篇文章主要为大家详细介绍了OpenCV实现透视变换矫正,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    GraceSkyer9832022-09-02
  • C/C++C语言指针基础详解

    C语言指针基础详解

    这篇文章主要介绍了C语言指针的基础,主要对C语言中指针的本质及常见用法做了较为通俗易懂的分析,是后续深入学习C语言的基础,需要的朋友可以参考下...

    RookieStriver5292022-02-12
  • C/C++详解C++设计模式编程中对访问者模式的运用

    详解C++设计模式编程中对访问者模式的运用

    这篇文章主要介绍了C++设计模式编程中对访问者模式的运用,访问者模式在不破坏类的前提下为类提供增加新的新操作,需要的朋友可以参考下...

    freshow4732021-03-28
  • C/C++Protocol Buffer技术深入理解(C++实例)

    Protocol Buffer技术深入理解(C++实例)

    C++实例Protocol Buffer技术详解,感兴趣的朋友可以了解下...

    C++教程网4252020-11-16
  • C/C++C语言高斯消元法的使用详解

    C语言高斯消元法的使用详解

    本篇文章是对C语言中高斯消元法的使用进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网4762020-11-29
  • C/C++C++中 set的用法

    C++中 set的用法

    这篇文章主要介绍了C++中 set的用法,set的内部使用了红黑树对所有的元素进行了排序。在树结构当中,我们通常使用的都是的形式。下面我们来看...

    Coder_LT9232022-02-19
  • C/C++C++数据结构与算法之哈夫曼树的实现方法

    C++数据结构与算法之哈夫曼树的实现方法

    这篇文章主要介绍了C++数据结构与算法之哈夫曼树的实现方法,简单说明了哈夫曼树的原理,并结合具体实例形式分析了C++实现哈夫曼树的相关操作技巧,需要...

    yunshouhu10092021-06-10