2021-08-27 分割之后mask在原图中提取出来(语义分割—实例分割)
1.生成分割后的mask
原图和mask如下:
2.mask二值化
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np# 获取图片
def getimg():return Image.open("2.png")def showimg(img, isgray=False):plt.axis("off")if isgray == True:plt.imshow(img, cmap='gray')else:plt.imshow(img)plt.show()im5 = getimg()
im5 = np.array(im5.convert('L'))
im5 = np.where(im5[...,:] < 165, 0, 255) #根据设置的阈值来进行黑白分类
showimg(Image.fromarray(im5), True)
生成如图:
3. mask二值化后取反
import os
from PIL import Image
import numpy as npdef resize(imgPath, savePath):files = os.listdir(imgPath)files.sort()print('****************')print('input :', imgPath)print('start...')for file in files:fileType = os.path.splitext(file)if fileType[1] == '.png':new_png = Image.open(imgPath + '/' + file) # 打开图片# new_png = new_png.resize((20, 20),Image.ANTIALIAS) #改变图片大小matrix = 255 - np.asarray(new_png) # 图像转矩阵 并反色new_png = Image.fromarray(matrix) # 矩阵转图像new_png.save(savePath + '/' + file) # 保存图片print('down!')print('****************')if __name__ == '__main__':# 待处理图片地址dataPath = 'G:\\666\\2\\'# 保存图片的地址savePath = 'G:\\666\\2\\'resize(dataPath, savePath)
如图:
4.把mask分割后的图像提取出来
import os
import cv2
import numpy as np
#im1 原图 im2 mask图(背景是黑色,前景是白色)
im1_path = 'G:/666/1/'
im2_path = 'G:/666/2/'num = len(os.listdir(im1_path))
for i in range(num):img1 = cv2.imread(os.path.join(im1_path, os.listdir(im1_path)[i]))img2 = cv2.imread(os.path.join(im2_path,os.listdir(im2_path)[i]), cv2.IMREAD_GRAYSCALE)h,w,c = img1.shapeimg3 = np.zeros((h,w,4))img3[:,:,0:3] = img1img3[:,:,3] = img2#这里命名随意,但是要注意使用png格式cv2.imwrite('G:/666/3/' + '%s.png' % os.listdir(im1_path)[i], img3)
生成图像:
另一种出来版本是黑色背景:
import cv2person = cv2.imread("1.png")
# back = cv2.imread("背景图")
#这里将mask图转化为灰度图
mask = cv2.imread("6.png",cv2.IMREAD_GRAYSCALE)
#将背景图resize到和原图一样的尺寸
# back = cv2.resize(back,(person.shape[1],person.shape[0]))
#这一步是将背景图中的人像部分抠出来,也就是人像部分的像素值为0
# scenic_mask =~mask
# scenic_mask = scenic_mask / 255.0
# back[:,:,0] = back[:,:,0] * scenic_mask
# back[:,:,1] = back[:,:,1] * scenic_mask
# back[:,:,2] = back[:,:,2] * scenic_mask
#这部分是将我们的人像抠出来,也就是背景部分的像素值为0
mask = mask / 255.0
person[:,:,0] = person[:,:,0] * mask
person[:,:,1] = person[:,:,1] * mask
person[:,:,2] = person[:,:,2] * mask
#这里做个相加就可以实现合并
# result = cv2.add(back,person)cv2.imwrite("3.jpg", person)
出图如下:
如果加上背景的话:(像素黑的就是0,随便附加颜色)
import cv2person = cv2.imread("1.png")
back = cv2.imread("0.png")
#这里将mask图转化为灰度图
mask = cv2.imread("6.png",cv2.IMREAD_GRAYSCALE)
#将背景图resize到和原图一样的尺寸
back = cv2.resize(back,(person.shape[1],person.shape[0]))
#这一步是将背景图中的人像部分抠出来,也就是人像部分的像素值为0
scenic_mask =~mask
scenic_mask = scenic_mask / 255.0
back[:,:,0] = back[:,:,0] * scenic_mask
back[:,:,1] = back[:,:,1] * scenic_mask
back[:,:,2] = back[:,:,2] * scenic_mask
#这部分是将我们的人像抠出来,也就是背景部分的像素值为0
mask = mask / 255.0
person[:,:,0] = person[:,:,0] * mask
person[:,:,1] = person[:,:,1] * mask
person[:,:,2] = person[:,:,2] * mask
#这里做个相加就可以实现合并
result = cv2.add(back,person)cv2.imwrite("88.jpg", result)
5.把mask分割后的图像可视化出来同步
# 将分割图和原图合在一起
from PIL import Image
import matplotlib.pyplot as plt# image1 原图
# image2 分割图
image1 = Image.open("1.png")
image2 = Image.open("6.png")image1 = image1.convert('RGBA')
image2 = image2.convert('RGBA')# 两幅图像进行合并时,按公式:blended_img = img1 * (1 – alpha) + img2* alpha 进行
image = Image.blend(image1, image2, 0.3)
image.save("test1.png")
image.show()
2021-08-27 分割之后mask在原图中提取出来(语义分割—实例分割)相关推荐
- 视频语义显著实例分割数据集SESIV
视频区域中,显著区域中有语义意义的组建,即语义显著实例.为解决视频语义显著实例分割,来自日本SOKENDAI和National Institute of Informatics的学者构建了一个新的数据 ...
- ICCV 2021 | 腾讯、华中科大提出QueryInst,开启基于Query的实例分割新思路
©作者 | 机器之心编辑部 来源 | 机器之心 实例分割(Instance Segmentation)任务有着广阔的应用和发展前景.来自腾讯 PCG 应用研究中心 (ARC) 和华中科技大学的研究者们 ...
- 基于三维点云场景的语义及实例分割:RandLA-Net和3D-BoNet
本文整理自牛津大学的杨波和胡庆拥在深蓝学院的线上公开课论文演讲.两位作者都是来自牛津大学的博士生,RandLA-Net和3D-BoNet分别发表在CVPR20和NeurIPS19上,两份工作都具有非常 ...
- RefineMask:实例分割,使用细粒度信息增强性能
标题:RefineMask: Towards High-Quality Instance Segmentation with Fine-Grained Features 论文:https://arxi ...
- 【实例分割】1、SOLOv1: Segmenting Objects by Locations_2019
文章目录 一.背景 二.本文方法 三.本文方法的具体做法 3.1 问题定义 3.1.1 Semantic category 3.1.2 Instance Mask 3.2 Network Archit ...
- JSIS3D:具有多任务点向网络和多值条件随机场的3D点云联合语义-实例分割
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:JSIS3D: Joint Semantic-Instance Segmentation of ...
- CVPR 2021 | 基于Transformer的端到端视频实例分割方法
实例分割是计算机视觉中的基础问题之一.目前,静态图像中的实例分割业界已经进行了很多的研究,但是对视频的实例分割(Video Instance Segmentation,简称VIS)的研究却相对较少.而 ...
- CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)
CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...
- 实例分割最新最全面综述:从Mask R-CNN到BlendMask
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|AI算法与图像处理 前面的话 实例分割(Instance ...
最新文章
- [C++]C++中的IO类
- ubuntu更新时区和时间
- 2018南京区域赛 J-Prime Game
- 保存到本地_手把手教你将微信表情包保存到本地
- 轻量小巧的Knife4j v2.0.8源码
- UVA10909 Lucky Number题解
- 死于决斗的数学天才伽罗瓦-人生的有限域
- 【优化调度】基于matlab蚁群算法求解无等待流水线调度优化问题【含Matlab源码 1516期】
- HUSTOJ教程(1)——安装部署
- 关于数字雨特效的学习
- 轻松搞懂word2vec / FastText + SVM(支持向量机)实现中英文情感分类
- ai怎么渐变颜色_ai渐变工具怎么用?Adobe Illustrator渐变颜色实操教程
- Ubuntu下批量修改文件名以及后缀名
- 跨文化交际复习题及答案(超全的)
- HTML中的botton type=reset标签失效(不起作用)的可能原因。
- STM32之DAC音频播放
- Kali linux最新2018年安装Netspeed
- jBox,实现批量查询
- mysql和ocrcle_oracle 12.1 RAC的ocr磁盘组异常恢复
- HTML5----响应式(自适应)网页设计
热门文章
- Nagios系统监控软件的安装设置(4)
- ASP.NET配置文件Web.config
- 面试八股文最新版出炉!一周肝了15个新篇章……
- 某程序媛哀叹:北京好几套房,家庭收入200多万,但孩子是渣娃,人生没意义了!...
- 万字长文带你全面认识 Kubernetes 中如何实现蓝绿部署、金丝雀发布和滚动更新...
- 看一遍就理解:MVCC原理详解
- 文末惊喜福利 | 盘点2021主流架构创新实践
- 鱼和熊掌兼得:同时使用 JPA 和 Mybatis
- 4.5万字手把手教你实现MySQL TB级数据存储!!
- 面试官:你说你熟悉jvm?那你讲一下并发的可达性分析