利用YOLOv8实例分割实现图像抠图
创作时间:
作者:
@小白创作中心
利用YOLOv8实例分割实现图像抠图
引用
CSDN
1.
https://blog.csdn.net/pengxiang1998/article/details/141257266
实例分割是计算机视觉中的一个重要任务,它不仅能识别图像中的目标,还能精确地分割出每个目标的轮廓。这种能力在很多应用场景中都非常有用,比如图像编辑、AR/VR内容制作等。本文将介绍如何使用YOLOv8的实例分割功能实现图像的自动抠图。
实例分割与图像抠图
实例分割(Instance Segmentation)是语义分割的进阶版本,它不仅能识别出图像中不同类别的区域,还能区分出属于同一类别的不同实例。例如,在一张包含多个人物的图片中,实例分割不仅能识别出“人物”这个类别,还能区分出每个人物的具体位置。
最直观的应用便是图像抠图了,我们将语义分割的预测代码修改一下,就可以实现抠图了,步骤如下:
- 调用语义分割模型,获取结果
- 拆分结果,因为结果中含有目标检测的box、类别等诸多信息,我们只需要得到masks即可
- 将masks循环遍历,在这里我们可以对选择扣出哪些目标,如人或是车辆(通过读取box中的cls可以知道其类别编号,通过读取result中的names属性可以对应类别与编号)
- 利用感兴趣区域来分割出相应目标,其余部分设置为黑色,当然也可以设置为透明
下面是一个完整的Python代码示例:
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")
实现背景透明的抠图
上面的代码实现了基本的图像抠图,但背景是黑色的。如果我们希望背景完全透明,可以使用PNG格式保存图像,并设置透明通道(Alpha通道)。以下是实现背景透明抠图的代码:
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")
抠图效果展示
下面是使用上述代码处理后的图像效果:
需要注意的是:
- 在图形图像学中,透明通道也称Alpha通道,代表数字图像中像素点的透明信息。白色的Alpha像素用以定义不透明的彩色像素,而黑色的Alpha定以透明像素,黑白之间的灰阶则是彩色图片中的半透明部分。
- 只有PNG和GIF格式能保存透明信息,像BMP、JPG格式的图片是不能保存透明信息的。
热门推荐
家电清洗——呵护家居生活的隐形守护者
挑选骑行眼镜全攻略:材质、颜色、防护、舒适性详解
项羽与刘邦:手下忠心差异探析
书评|《局外人》:谁在审判席上豢养我们的灵魂?
笔记本电脑2K分辨率配置应如何选择?选择时需考虑哪些因素?
M1895李氏海军步枪:创新设计与历史意义
业务新手必看!一次搞懂B2B、B2C业务差异与必备技巧
B2B销售与B2C销售:定义、区别及销售过程详解
如何掌握期货市场的技术分析和基本面分析?这些分析方法有哪些优缺点?
人这一辈子,一定要体验西安的“十二时辰”!
中年妇女保健品,中年女人吃什么保健品比较好
中年女性吃什么可以提高免疫力
鲨鱼天线的安装方法有哪些?这些方法如何确保天线的稳固性和信号强度?
深圳6号线支线二期、13号线一期新进展来了:全线长轨通!
小儿中医预防感冒
喝水少为啥尿液会变黄?
虱目鱼全鱼有200多根刺!想避刺就选虱目鱼鱼肚
Windows 10系统下软件自启动的三种设置方法
气候变化威胁狼獾的山区栖息地,美国采取行动保护狼獾
“一眼千年”赵州桥:世界现存最早、跨度最大的单孔圆弧敞肩石拱桥
RPA在汽车行业的应用:从制造到售后的全方位解决方案
口袋妖怪漆黑魅影的神兽位置图文分享,新手玩家建议收藏!
汽车领域中扭矩究竟是怎么计算的
GH4738镍铬钴基高温合金硬度、熔化温度范围与合金组织结构
青岛地铁6号线沿线景点游玩攻略
毛衣编织入门:起针、松紧边、加针与收针详解
狗能吃猕猴桃吗?狗狗盯着猕猴桃流口水?可以吃但有讲究
系统自带远程桌面连接怎么用?远程桌面连接设置
易经与命理:揭示个人天赋与命运之道
星形细胞瘤ct表现特点