2021-08-27 分割之后mask在原图中提取出来(语义分割—实例分割)

本文介绍了如何通过深度学习生成分割mask,并进行二值化、取反操作。接着详细阐述了如何从mask中提取图像,包括生成透明和黑色背景的版本。最后,文章比较了使用opencv和pillow抠图的效果,并提供了差异比较的代码,以验证提取的准确性。
摘要由CSDN通过智能技术生成

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 np

def 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.shape
    img3 = np.zeros((h,w,4))
    img3[:,:,0:3] = img1
    img3[:,:,3] = img2
    #这里命名随意,但是要注意使用png格式
    cv2.imwrite('G:/666/3/&#
  • 46
    点赞
  • 335
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
### 回答1: 要训练自己的数据集,我们首先需要下载Mask R-CNN模型的代码和预训练的权重。我们可以从GitHub上的Mask R-CNN项目获得代码。将代码克隆到本地后,我们可以安装所需的依赖库。 接下来,我们需要准备我们自己的数据集。数据集应包含图像和相应的实例分割标注。标注可以是标记每个实例的掩码或边界框。确保标注与图像具有相同的文件名,并将它们保存在单独的文件夹。 一旦准备好数据集,我们需要将它们进行预处理,以便能够与Mask R-CNN模型兼容。为此,我们可以编写一个数据加载器,该加载器将图像和标注转换为模型可以处理的格式。 在准备好数据集和数据加载器后,我们可以开始训练模型。通过运行训练脚本,我们可以指定训练数据集的路径、模型的配置以及需要的其他参数。模型将针对给定的数据集进行迭代,逐步学习实例分割任务。 训练过程可能需要一定时间,具体取决于数据集的大小和复杂性。我们可以利用GPU加速来加快训练速度。 一旦训练完成,我们可以使用自己的数据集进行图像实例分割。导入训练好的模型权重,我们可以提供测试图像并获得模型对实例的分割结果。 总之,训练自己的数据集以进行图像实例分割需要下载Mask R-CNN代码和预训练权重。然后,准备和预处理数据集,并编写数据加载器。使用训练脚本进行模型训练,并在训练完成后使用自己的数据集进行图像实例分割。 ### 回答2: 要训练自己的数据集,首先需要下载并设置合适的数据集。可以从各种资源寻找与自己目标相关的图像数据集,并确保数据集包含正确的标注信息,例如每个图像的实例分割掩模。 接下来,我们需要安装并配置Mask R-CNN的开发环境。可以通过使用Python包管理工具pip来安装所需依赖,并下载Mask R-CNN代码库。然后,根据具体的数据集,需要进行一些配置调整,例如修改配置文件相关的参数设置,如类别数目、训练和验证数据集的路径等等。 接下来,将数据集准备成模型可接受的格式。一般来说,我们需要将数据集划分为训练集和验证集,并提供每个图像的标注信息。可以使用一些处理工具来将数据集进行预处理,将图像转换为模型可接受的格式,并将标注信息保存为对应的掩模图像。 接下来,我们可以开始训练模型了。通过运行相应的训练脚本,可以开始构建并训练Mask R-CNN模型。训练过程会根据指定的配置和数据集进行迭代更新,直到模型收敛或达到预设的迭代次数。可以根据具体的训练状态和需求来监控训练过程,并根据需要进行调整和优化。 最后,一旦训练完成,我们可以使用训练好的模型对新的图像进行实例分割。可以通过加载训练好的权重文件来恢复模型,并使用模型对输入图像进行预测和推断,得到每个实例的分割结果。可以将结果保存为掩模图像或直接可视化展示。 在整个训练过程,需要注意数据集的质量,合理调整模型的参数和配置,并进行适当的训练和验证策略,以获得更好的实例分割效果。 ### 回答3: Mask R-CNN 是一种用于图像实例分割深度学习模型,它结合了目标检测和语义分割的特点。在实际应用,我们需要将模型训练在自己的数据集上,以便能够准确地对我们感兴趣的目标进行实例分割。 首先,我们需要准备自己的数据集。这包括收集具有实例标注的图像,并将它们分成训练集和验证集。实例标注是指为每个图像的目标对象绘制边界框和遮罩,以指示目标的位置和形状。 接下来,我们需要下载并配置Mask R-CNN的代码库。这可以通过在GitHub上找到Mask R-CNN的实现并进行下载。下载完成后,我们需要根据自己的数据集修改代码的配置文件,以适应我们的数据集和实验需求。 然后,我们可以开始训练自己的数据集。通过运行训练脚本,并指定数据集路径、模型配置和训练参数,我们可以开始训练模型。训练过程需要一定的时间和计算资源,具体时间取决于数据集的规模和硬件条件。 在训练过程,模型会逐渐学习到目标的外观和形状特征,并生成准确的边界框和遮罩。可以通过查看训练过程的损失值和验证指标来监控模型的训练情况,并根据需要进行调整和优化。 最后,当模型训练完成后,我们可以使用它对新的图像进行实例分割。通过加载训练好的权重,并用模型进行预测,我们可以得到每个目标对象的边界框和遮罩。这些结果可以进一步用于目标跟踪、图像分析等应用。 综上所述,训练自己的数据集可以帮助我们将Mask R-CNN模型应用到我们关心的领域,并进行准确的图像实例分割。这需要准备数据集、下载代码库、修改配置文件、进行模型训练和应用预测等步骤。通过这一过程,我们可以获得针对自己数据集的个性化实例分割模型,以满足我们具体的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值