利用YOLOv8实例分割实现图像抠图

那么,实例分割有什么用呢,最直观的应用便是抠图了,我们将语义分割的预测代码修改一下,就可以实现抠图了,步骤如下:

  1. 调用语义分割模型,获取结果result
  2. 拆分result,因为result中含有目标检测的box、类别等诸多信息,我们只需要得到masks即可
  3. masks循环遍历,在这里我们可以对选择扣出哪些目标,如人或是车辆(通过读取box中的cls可以知道其类别编号,通过读取result中的names属性可以对应类别与编号
  4. 利用感兴趣区域来分割出相应目标,其余部分设置为黑色,当然也可以设置为透明
import cv2
import numpy as np
from ultralytics import YOLO

if __name__ == "__main__":
    model = YOLO("yolov8n-seg.pt")
    img = cv2.imread("1.jpg")
    img=cv2.resize(img,(640,640))
    result = model(img)
    result=result[0]
    names = result.names
    boxes = result.boxes.data.tolist()
    masks = result.masks
    image=np.zeros_like(img)
    for i, mask in enumerate(masks):
        mask = masks.data[i].cpu().numpy().astype(np.bool_)
        image[mask]=img[mask]
    cv2.imwrite("predict.jpg", image)
    print("save done")

抠图效果如下:

在这里插入图片描述

下面的代码是只抠出人物,并且背景透明。
关于图像透明,需要注意的几点:

  1. 在图形图像学中,透明通道也称Alpha通道,代表数字图像中像素点的透明信息。白色的Alpha像素用以定义不透明的彩色像素,而黑色的Alpha定以透明像素,黑白之间的灰阶则是彩色图片中的半透明部分。
  2. 只有pnggif格式能保存透明信息,像BMPJPG格式的图片是不能保存透明信息的。
import cv2
import numpy as np
from ultralytics import YOLO
if __name__ == "__main__":
    model = YOLO("yolov8n-seg.pt")
    img = cv2.imread("3.jpg")
    img=cv2.resize(img,(640,640))
    result = model(img)
    result=result[0]
    names = result.names
    cls=result.boxes.cls
    boxes = result.boxes.data.tolist()
    masks = result.masks
    masked_image_rgba=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)#添加alpha通道
    mask_save = np.zeros((640,640)).astype(np.bool_)
    for i, mask in enumerate(masks):
        if cls[i]==0:
            mask=masks.data[i].cpu().numpy().astype(np.bool_)
            mask_save=mask_save|mask
        else:
            continue
    masked_image_rgba[~mask_save] = (0,0,0,0)  # 将非掩码区域设置为透明
    cv2.imwrite("predict.jpg", masked_image_rgba)
    print("save done")

在这里插入图片描述

对于物体轮廓识别,YOLOv5 是一个非常流行的算法。YOLOv5 是基于深度学习的物体检测算法,它能够迅速而准确地检测出图像中的多个物体并标定其边界框。该算法采用了一种实时目标检测的方法,能够在不降低精度的情况下提高检测速度。 YOLOv5 的网络架构是由一系列卷积层和连接层组成的。它使用了一种称为"anchor boxes"的技术,这些框架用于预测不同尺度和长宽比的物体。此外,YOLOv5 还使用了一种称为"Feature Pyramid Networks"(FPN)的技术来增强模型对不同尺度物体的识别能力。 要使用 YOLOv5 进行物体轮廓识别,你可以按照以下步骤进行操作: 1. 安装 YOLOv5:你可以在 GitHub 上找到 YOLOv5 的源代码,并按照指南进行安装。 2. 准备数据集:你需要有一个包含标注信息(物体类别和边界框)的数据集。可以使用现有的公开数据集,或者自己制作一个数据集。 3. 训练模型:使用准备好的数据集对 YOLOv5 进行训练,以便让模型学习如何识别物体轮廓。 4. 进行推理:使用训练好的模型对新的图像进行物体轮廓识别。模型会输出检测到的物体类别和边界框。 需要注意的是,YOLOv5 是一个开源项目,你可以根据自己的需求进行自定义和修改。此外,还有一些其他的物体检测算法和工具可供选择,你可以根据实际情况选择最适合你的需求的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭祥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值