使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

Posted 程序媛一枚~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层相关的知识,希望对你有一定的参考价值。

使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

这篇博客将介绍如何使用OpenCV制作Mask图像掩码。使用位运算和图像掩码允许我们只关注图像中感兴趣的部分,截取出任意区域的ROIs。

应用:

1. 效果图

原始图如下:(老九门颖宝&佛爷~)在这里插入图片描述

矩形掩码 VS 效果图如下:(使用矩形掩码,只提取图像中包含人物的区域,而忽略其他区域)
在这里插入图片描述
圆形掩码 VS 效果图如下:(圆形掩模显示在左边,掩模的应用在右边。实质上可以使用任意形状的掩码图像,如矩形、圆、线、多边形等从图像中提取区域)
在这里插入图片描述

2. 源码

# 分别使用矩形和圆形遮罩从图像中提取身体和脸部。
# USAGE
# python opencv_masking.py

import argparse

import cv2
# 导入必要的包
import numpy as np

# 构建命令行参数及解析
# --image 输入图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="yc.jpg",
                help="path to the input image")
args = vars(ap.parse_args())

# 加载原始输入图像,并展示
image = cv2.imread(args["image"])
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, (155, 200), 140, 255, -1)
masked = cv2.bitwise_and(image, image, mask=mask)

# 展示输出图像
cv2.imshow("Circular Mask", mask)
cv2.imshow("Circular Mask Applied to Image", masked)
cv2.waitKey(0)

参考

以上是关于使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层的主要内容,如果未能解决你的问题,请参考以下文章

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

python使用NiBabel包加载.nii文件使用opencv加载jpg原图图像并转化为灰度图最后比较原图和mask掩码图的形状是否一致

数据增强——python opencv 找出图像中的最大轮廓并填充(生成mask)——python 轮廓内部填充

python基于图像的掩码mask信息获取病灶区域ROI最小外接矩形坐标位置opencv基于掩码最小外接矩形坐标剪裁原图(crop image by mask rectangle)

OpenCV - 从灰度图像切出Mask前景区域

在OpenCV和Mask_RCNN中使用Java