OpenCV制作Mask图像掩码的案例

目录
  • 一、掩膜(mask)
  • 二、案例
    • 1.效果图
    • 2. 源码

一、掩膜(mask)

在有些图像处理的函数中有的参数里面会有mask参数,即此函数支持掩膜操作,首先何为掩膜以及有什么用,如下:
数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域。
图像掩膜与其类似,用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。
数字图像处理中,掩模为二维矩阵数组,有时也用多值图像,图像掩模主要用于:
①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
④特殊形状图像的制作。

二、案例

1.效果图

原始图如下:

矩形掩码 VS 效果图如下:(使用矩形掩码,只提取图像中指定的区域,而忽略其他区域)

圆形掩码 VS 效果图如下:(圆形掩模显示在左边,掩模的应用在右边。实质上可以使用任意形状的掩码图像,如矩形、圆、线、多边形等从图像中提取区域)

2. 源码

def main():
    '''
    分别使用矩形和圆形遮罩从图像中提取矩形区域和圆形区域。
    '''
    import argparse
    import cv2
    import numpy as np

    images_bg = r'C:\dest\speed_bg.png'
    # 加载原始输入图像,并展示
    image = cv2.imread(images_bg)
    cv2.imshow("Original", image)
    # 掩码和原始图像具有相同的大小,但是只有俩种像素值:0(背景忽略)、255(前景保留)
    mask = np.zeros(image.shape[:2], dtype="uint8")
    cv2.rectangle(mask, (30, 90), (280, 440), 255, -1)
    cv2.imshow("Rectangular Mask", mask)
    # 应用掩码图像
    masked = cv2.bitwise_and(image, image, mask=mask)
    cv2.imshow("Rectangular Mask Applied to Image", masked)
    cv2.waitKey(0)
    # 构造一个圆形掩码(半径为140px,并应用位运算)
    mask = np.zeros(image.shape[:2], dtype="uint8")
    cv2.circle(mask, (210, 210), 160, 255, -1)
    # cv2.circle(mask, (202, 202), 110, 255, -1)
    masked = cv2.bitwise_and(image, image, mask=mask)
    bitwiseNot = cv2.bitwise_not(mask)
    cv2.imshow("bitwiseNot", bitwiseNot)
    # 展示输出图像
    cv2.imshow("Circular Mask", mask)
    cv2.imshow("Circular Mask Applied to Image", masked)
    cv2.waitKey()
    # TACH_PATTERN_PATH = r'C:\dest\new\tach_mask.png'
    # aircv.imwrite(TACH_PATTERN_PATH, bitwiseNot)
    TACH_PATTERN_PATH2 = r'C:\dest\new\speed_mask.png'
    aircv.imwrite(TACH_PATTERN_PATH2, mask)

if __name__ == "__main__":
    main()

参考资料:
Image Masking with OpenCV
超详细注释之OpenCV制作图像Mask
OpenCV之bitwise_and、bitwise_not等图像基本运算及掩膜

到此这篇关于OpenCV制作Mask图像掩码的文章就介绍到这了,更多相关OpenCV Mask图像掩码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++ OpenCV实现灰度图蒙版GrayMask的示例代码

    目录 需求说明 具体流程 功能函数 C++测试代码 测试效果 需求说明 在对图像进行处理时,经常会有这类需求:想对感兴趣区域进行掩膜处理,只操作掩膜内数据,此时需要搭配掩膜绘制功能,并在绘制过程中希望能区分掩膜区和非掩膜区:除了掩膜本身的线条以外,还希望掩膜内图像是原色,掩膜外图像的颜色进行一定调整:通常可以采用图像透明化或者色彩单通道加深的方式实现. 比如对三通道的图像,可以将掩膜外数据的红通道数值提高,此时该部分图像就会偏红色,如下图1所示. 图1 颜色加深的蒙版效果 但是针对灰度图,因为图

  • OpenCV实现从灰度图像切出Mask前景区域

    从灰度图像,根据阈值,切出多个前景区域,过滤面积太小的图像. OpenCV的Python逻辑,clip_gray_patches: def clip_gray_patches(img_gray, ths=32, filter_percent=0.0005): """ 从灰度图像切出多个前景区域,阈值大于ths,过滤面积占比小于filter_percent的图像 @param img_gray: 灰度图像 @param ths: 前景阈值 @param filter_perce

  • Opencv图像处理之详解掩膜mask

    1.在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底什么呢? 2.如果我们想要裁剪图像中任意形状的区域时,应该怎么办呢? 答案是,使用掩膜(masking). 我们先看一下掩膜的基础.图像的位运算. 图像基本运算 图像的基本运算有很多种,比如两幅图像可以相加.相减.相乘.相除.位运算.平方根.对数.绝对值等:图像也可以放大.缩小.旋转,还可以截取其中的一部分作为ROI(感兴趣区域)进行操作,各个颜色通道还可以分别提取及对各个颜色通道进行各种运算操

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

    目录 前言 一.mask是什么? 二.OpenCV生成mask的几种方法 总结 前言 OpenCV中的很多函数用到mask,mask是什么?怎么作一个mask?将是本文的主要内容. 一.mask是什么? mask 不是马斯克,是掩膜,可以用来遮盖非感兴趣区,突出感兴趣区,使得图像处理只专注于ROI部分. 二.OpenCV生成mask的几种方法 注意:mask最终需要与要作用到的输入图像的尺寸与类型保持一致 矩形 #include <opencv2/opencv.hpp> using names

  • OpenCV制作Mask图像掩码的案例

    目录 一.掩膜(mask) 二.案例 1.效果图 2. 源码 一.掩膜(mask) 在有些图像处理的函数中有的参数里面会有mask参数,即此函数支持掩膜操作,首先何为掩膜以及有什么用,如下:数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域.图像掩膜与其类似,用选定的图像.图形或物体,对处理

  • 超详细注释之OpenCV制作图像Mask

    这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只关注图像中感兴趣的部分,截取出任意区域的ROIs. 应用: 图像感兴趣区域的截取: 图像融合:构建透明的叠加层: 1. 效果图 原始图如下:(老九门颖宝&佛爷~) 矩形掩码 VS 效果图如下:(使用矩形掩码,只提取图像中包含人物的区域,而忽略其他区域) 圆形掩码 VS 效果图如下:(圆形掩模显示在左边,掩模的应用在右边.实质上可以使用任意形状的掩码图像,如矩形.圆.线.多边形等从图像中提取区域) 2. 源码 #

  • C++ OpenCV实战之制作九宫格图像

    目录 前言 一.九宫格图像 二.源码 三.效果显示 总结 前言 本文将使用OpenCV C++ 制作九宫格图像.其实原理很简单,就是将一张图像均等分成九份.然后将这九个小块按一定间隔(九宫格效果)拷贝到新画布上就可以啦. 一.九宫格图像 原图如图所示.本案例的需求是希望将图像均等分成九份,制作九宫格图像.首先得将原图均等分成九份. 如图所示.将原图均等分成九份,然后将这每一个小方块按照一定的间隔(九宫格效果)拷贝到新图像就可以了.具体算法思想请看源码注释. 二.源码 #include<iostr

  • python opencv 找出图像中的最大轮廓并填充(生成mask)

    本文主要介绍了python opencv 找出图像中的最大轮廓并填充,分享给大家,具体如下: import cv2 import numpy as np from PIL import Image from joblib import Parallel from joblib import delayed # Parallel 和 delayed是为了使用多线程处理 # 使用前需要安装joblib:pip install joblib # img_stack的shape为:num, h, w #

  • Python+OpenCV绘制多instance的Mask图像

    目标:Mask中,不同值表示不同的实例(instance),在原图中,绘制不同的instance实例,每个实例用不同颜色表示,实例边界用白色表示. 源码: def generate_colors(n_colors, seed=47): """ 随机生成颜色 """ np.random.seed(seed) color_list = [] for i in range(n_colors): color = (np.random.random((1,

  • OpenCV学习之图像的分割与修复详解

    目录 背景 一.分水岭法 二.GrabCut法 三.MeanShift法 四.MOG前景背景分离法 五.拓展方法 六.图像修复 总结 背景 图像分割本质就是将前景目标从背景中分离出来.在当前的实际项目中,应用传统分割的并不多,大多是采用深度学习的方法以达到更好的效果:当然,了解传统的方法对于分割的整体认知具有很大帮助,本篇将介绍些传统分割的一些算法: 一.分水岭法 原理图如下: 利用二值图像的梯度关系,设置一定边界,给定不同颜色实现分割: 实现步骤: 标记背景 —— 标记前景 —— 标记未知区域

  • 使用OpenCV实现人脸图像卡通化的示例代码

    引言 通过前面的文章我们已经了解到OpenCV 是一个用于计算机视觉和机器学习的开源 python 库.它主要针对实时计算机视觉和图像处理.它用于对图像执行不同的操作,这些操作使用不同的技术对图像进行转换.在本文中,我们将实现使用OpenCV将人脸图像卡通化. 让我们从导入必需的库开始! import cv2 import numpy as np 第一次变换(卡通化) 在这个转换中,我们将找到图像的边缘,并使用双边滤波器和位操作符制作一个卡通化的图像. # Reading the Image i

  • Python OpenCV图像处理之图像滤波特效详解

    目录 1分类 2邻域滤波 2.1线性滤波 2.2非线性滤波 3频域滤波 3.1低通滤波 3.2高通滤波 1 分类 图像滤波按图像域可分为两种类型: 邻域滤波(Spatial Domain Filter),其本质是数字窗口上的数学运算.一般用于图像平滑.图像锐化.特征提取(如纹理测量.边缘检测)等,邻域滤波使用邻域算子——利用给定像素周围像素值以决定此像素最终输出的一种算子 频域滤波(Frequency Domain Filter),其本质是对像素频率的修改.一般用于降噪.重采样.图像压缩等. 按

  • C++ OpenCV学习之图像金字塔与图像融合详解

    目录 1金字塔 2什么是图像金字塔? 3图像金字塔有什么用? 4OpenCV实战图像金字塔 1 金字塔 平时你听到.见到的金字塔是什么样的? 这样? 还是这样? 实际上除了这些,还有图像金字塔   图像金字塔有什么用?为什么要称作图像金字塔?本文带你研究这些问题. 2 什么是图像金字塔? 正如生物视觉系统会处理分层次的尺寸一样,计算机视觉系统实现多分辨率图像处理的基础是图像金字塔. 考虑这样一个场景:输入系统一幅图像来检测人脸.由于事先并不知道人脸在这张图片中可能的尺寸,所以需要根据输入生成一个

  • Python+OpenCv制作证件图片生成器的操作方法

    本项目使用Python和OpenCv实现身份证图片生成工具,填入信息,选择一张头像图片(即可生成黑白和彩色身份证图片).可以选择是否自动抠图,自动抠图目前仅支持蓝色背景,对自动抠图效果不满意可以手动抠图. 在线抠图地址: https://burner.bonanza.com/ https://www.gaoding.com/koutu 参照标准: 正面 "姓名"."性别"."民族"."出生年月日"."住址"

随机推荐