OpenCV 掩模

本文介绍了图像掩膜操作,即根据掩膜矩阵和图像像素值进行位运算,可控制或改变像素点产生新图像。还阐述了掩膜的主要用途,包括提取感兴趣区、屏蔽作用以及提高图片锐化度,并给出了相关用途的参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  掩膜操作,是指根据一个掩膜矩阵(也称为内核kernel)和图像中每个像素的值进行各种位运算(比如与、或、非运算与普通的位运算类似)。掩膜可以控制甚至改变图像的每一个像素点,从而产生新的图像。

掩膜主要有以下用途:

1、提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
2、屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
3、处理图片,使得图片的锐化度更高

对于掩膜用途1、2可以看:https://www.cnblogs.com/skyfsm/p/6894685.html

对于掩膜用途3可以看:https://blog.youkuaiyun.com/u013165921/article/details/78423735

 

 

 

在C++中使用OpenCV创建多边形掩模(Polygon Mask)是一种常见的图像处理任务,尤其是在需要对图像的特定区域进行分析或处理时。OpenCV提供了多种方法来实现这一功能,最常用的方式是使用`fillPoly`或`fillConvexPoly`函数来创建掩模。 ### 使用`fillPoly`创建多边形掩模 `fillPoly`函数可以用于填充多个多边形区域,适用于非凸多边形。它的基本用法如下: ```cpp void cv::fillPoly(cv::InputOutputArray img, const cv::Point** pts, const int* npts, int ncontours, const cv::Scalar& color, int lineType = 8, int shift = 0, cv::Point offset = cv::Point()); ``` - `img`:输出图像,通常是一个单通道的掩模图像。 - `pts`:指向多边形顶点数组的指针。 - `npts`:每个多边形的顶点数。 - `ncontours`:多边形的数量。 - `color`:填充颜色,通常为白色(255)。 - `lineType`:线条类型,可选值包括8连通或4连通。 #### 示例代码: ```cpp #include <opencv2/opencv.hpp> #include <vector> int main() { // 创建一个空白图像作为掩模 cv::Mat mask = cv::Mat::zeros(500, 500, CV_8UC1); // 定义多边形的顶点 std::vector<cv::Point> polygon; polygon.push_back(cv::Point(100, 100)); polygon.push_back(cv::Point(200, 50)); polygon.push_back(cv::Point(300, 150)); polygon.push_back(cv::Point(250, 300)); polygon.push_back(cv::Point(150, 250)); // 创建一个指向多边形顶点的指针数组 const cv::Point* pts[] = { polygon.data() }; int npts[] = { (int)polygon.size() }; // 填充多边形 cv::fillPoly(mask, pts, npts, 1, cv::Scalar(255), 8, 0, cv::Point()); // 显示掩模图像 cv::imshow("Mask", mask); cv::waitKey(0); return 0; } ``` ### 使用`fillConvexPoly`创建凸多边形掩模 如果多边形是凸的,可以使用`fillConvexPoly`函数,它比`fillPoly`更高效。 ```cpp void cv::fillConvexPoly(cv::InputOutputArray img, const cv::Point* pts, int npts, const cv::Scalar& color, int lineType = 8, int shift = 0); ``` - `img`:输出图像。 - `pts`:多边形顶点数组。 - `npts`:顶点数量。 - `color`:填充颜色。 - `lineType`:线条类型。 #### 示例代码: ```cpp #include <opencv2/opencv.hpp> #include <vector> int main() { // 创建一个空白图像作为掩模 cv::Mat mask = cv::Mat::zeros(500, 500, CV_8UC1); // 定义凸多边形的顶点 std::vector<cv::Point> polygon; polygon.push_back(cv::Point(100, 100)); polygon.push_back(cv::Point(200, 50)); polygon.push_back(cv::Point(300, 150)); polygon.push_back(cv::Point(250, 300)); polygon.push_back(cv::Point(150, 250)); // 填充凸多边形 cv::fillConvexPoly(mask, polygon.data(), (int)polygon.size(), cv::Scalar(255), 8, 0); // 显示掩模图像 cv::imshow("Mask", mask); cv::waitKey(0); return 0; } ``` ### 使用掩模进行图像处理 一旦创建了掩模,可以使用`cv::bitwise_and`函数将掩模应用到原始图像上,以提取感兴趣区域(ROI)。 ```cpp cv::Mat src = cv::imread("input.jpg"); cv::Mat result; cv::bitwise_and(src, src, result, mask); cv::imshow("Result", result); cv::waitKey(0); ``` 通过上述方法,可以灵活地创建多边形掩模并应用于各种图像处理任务中。掩模技术在目标检测、图像分割等领域有广泛应用,特别是在结合深度学习模型(如Mask R-CNN)时[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值