《博主简介》

小伙伴们好,我是阿旭。
专注于计算机视觉领域,包括目标检测、图像分类、图像分割和目标跟踪等项目开发,提供模型对比实验、答疑辅导等。

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发 2.【车牌识别与自动收费管理系统开发
3.【手势识别系统开发 4.【人脸面部活体检测系统开发
5.【图片风格快速迁移软件开发 6.【人脸表表情识别系统
7.【YOLOv8多目标识别与自动标注软件开发 8.【基于深度学习的行人跌倒检测系统
9.【基于深度学习的PCB板缺陷检测系统 10.【基于深度学习的生活垃圾分类目标检测系统
11.【基于深度学习的安全帽目标检测系统 12.【基于深度学习的120种犬类检测与识别系统
13.【基于深度学习的路面坑洞检测系统 14.【基于深度学习的火焰烟雾检测系统
15.【基于深度学习的钢材表面缺陷检测系统 16.【基于深度学习的舰船目标分类检测系统
17.【基于深度学习的西红柿成熟度检测系统 18.【基于深度学习的血细胞检测与计数系统
19.【基于深度学习的吸烟/抽烟行为检测系统 20.【基于深度学习的水稻害虫检测与识别系统
21.【基于深度学习的高精度车辆行人检测与计数系统 22.【基于深度学习的路面标志线检测与识别系统
23.【基于深度学习的智能小麦害虫检测识别系统 24.【基于深度学习的智能玉米害虫检测识别系统
25.【基于深度学习的200种鸟类智能检测与识别系统 26.【基于深度学习的45种交通标志智能检测与识别系统
27.【基于深度学习的人脸面部表情识别系统 28.【基于深度学习的苹果叶片病害智能诊断系统
29.【基于深度学习的智能肺炎诊断系统 30.【基于深度学习的葡萄簇目标检测系统
31.【基于深度学习的100种中草药智能识别系统 32.【基于深度学习的102种花卉智能识别系统
33.【基于深度学习的100种蝴蝶智能识别系统 34.【基于深度学习的水稻叶片病害智能诊断系统
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统 36.【基于深度学习的智能草莓病害检测与分割系统
37.【基于深度学习的复杂场景下船舶目标检测系统 38.【基于深度学习的农作物幼苗与杂草检测系统
39.【基于深度学习的智能道路裂缝检测与分析系统 40.【基于深度学习的葡萄病害智能诊断与防治系统
41.【基于深度学习的遥感地理空间物体检测系统 42.【基于深度学习的无人机视角地面物体检测系统
43.【基于深度学习的木薯病害智能诊断与防治系统 44.【基于深度学习的野外火焰烟雾检测系统
45.【基于深度学习的脑肿瘤智能检测系统 46.【基于深度学习的玉米叶片病害智能诊断与防治系统
47.【基于深度学习的橙子病害智能诊断与防治系统 48.【基于深度学习的车辆检测追踪与流量计数系统
49.【基于深度学习的行人检测追踪与双向流量计数系统 50.【基于深度学习的反光衣检测与预警系统
51.【基于深度学习的危险区域人员闯入检测与报警系统 52.【基于深度学习的高密度人脸智能检测与统计系统
53.【基于深度学习的CT扫描图像肾结石智能检测系统 54.【基于深度学习的水果智能检测系统
55.【基于深度学习的水果质量好坏智能检测系统 56.【基于深度学习的蔬菜目标检测与识别系统
57.【基于深度学习的非机动车驾驶员头盔检测系统 58.【太基于深度学习的阳能电池板检测与分析系统
59.【基于深度学习的工业螺栓螺母检测 60.【基于深度学习的金属焊缝缺陷检测系统
61.【基于深度学习的链条缺陷检测与识别系统 62.【基于深度学习的交通信号灯检测识别
63.【基于深度学习的草莓成熟度检测与识别系统 64.【基于深度学习的水下海生物检测识别系统
65.【基于深度学习的道路交通事故检测识别系统 66.【基于深度学习的安检X光危险品检测与识别系统
67.【基于深度学习的农作物类别检测与识别系统 68.【基于深度学习的危险驾驶行为检测识别系统
69.【基于深度学习的维修工具检测识别系统 70.【基于深度学习的维修工具检测识别系统
71.【基于深度学习的建筑墙面损伤检测系统 72.【基于深度学习的煤矿传送带异物检测系统
73.【基于深度学习的老鼠智能检测系统 74.【基于深度学习的水面垃圾智能检测识别系统
75.【基于深度学习的遥感视角船只智能检测系统 76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统 78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统
79.【基于深度学习的果园苹果检测与计数系统 80.【基于深度学习的半导体芯片缺陷检测系统
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统 82.【基于深度学习的运动鞋品牌检测与识别系统
83.【基于深度学习的苹果叶片病害检测识别系统 84.【基于深度学习的医学X光骨折检测与语音提示系统
85.【基于深度学习的遥感视角农田检测与分割系统 86.【基于深度学习的运动品牌LOGO检测与识别系统
87.【基于深度学习的电瓶车进电梯检测与语音提示系统 88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统 90.【基于深度学习的舌苔舌象检测识别与诊断系统
91.【基于深度学习的蛀牙智能检测与语音提示系统 92.【基于深度学习的皮肤癌智能检测与语音提示系统
93.【基于深度学习的工业压力表智能检测与读数系统 94.【基于深度学习的CT扫描图像肝脏肿瘤智能检测与分析系统】
95.【基于深度学习的CT扫描图像脑肿瘤智能检测与分析系统】 96.【基于深度学习的甲状腺结节智能检测分割与诊断系统】
97.【基于深度学习的车载视角路面病害检测系统】 98.【基于深度学习的宫腔镜病变智能检测与语音提示系统】
99.【基于深度学习的人群密集检测统计分析与报警系统 100.【基于深度学习的路面积水智能检测分割与分析系统】
101.【基于深度学习的钢丝绳缺陷检测与语音提示系统 102.【基于深度学习的无人机视角河道水面垃圾检测系统
103.【基于深度学习的停车场车位智能检测识别系统】 104.【基于深度学习的无人机视角野外搜救人员检测与语音提示系统
105.【基于深度学习的无人机视角路面病害检测识别系统 106.【基于深度学习的无人机红外视角海上搜救人员检测与语音提示系统
107.【基于深度学习的交警手势识别系统 108.【基于深度学习的红外图像光伏板热斑缺陷检测与语音提示系统】
109.【基于深度学习的风力机缺陷检测与语音提示系统】 110.【基于深度学习的茶叶病害智能检测识别系统】
111.【基于深度学习的铁轨部件缺陷检测与语音提示系统】 112.【基于深度学习的无人机视角车辆检测系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

引言

在计算机视觉任务中,目标检测负责“找得到”物体,而分割负责“分得出”物体的像素级轮廓。今天我们就用YOLO26(极速目标检测)+ SAM3(精准掩码生成)搭建一套实用的流水线,无需从零训练分割模型,就能快速得到干净的二值掩码结果。

这套方案既保留了YOLO26的检测速度,又发挥了SAM3的掩码精度,不管是做数据集构建、背景移除还是视觉质检,都能直接复用,而且代码足够简洁,新手也能轻松上手。

第一步:搭建运行环境

环境混乱是新手踩坑的重灾区,我们用Conda创建独立环境,确保PyTorch、Ultralytics(YOLO/SAM2的核心库)、OpenCV版本匹配,避免“本地能跑、换机器就崩”的问题。

环境配置命令

# 1. 创建名为Yolo-311的Conda环境,指定Python3.11
conda create --name Yolo-311 python=3.11
# 2. 激活该环境(后续安装的包都只在这个环境生效)
conda activate Yolo-311

# 3. 验证CUDA版本(确保后续装的PyTorch适配显卡)
nvcc --version

# 4. 安装支持CUDA 12.4的PyTorch(GPU加速必备)
conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 pytorch-cuda=12.4 -c pytorch -c nvidia         

# 5. 安装指定版本的Ultralytics
pip install ultralytics==8.4.0
# 6. 安装OpenCV(处理图像读写和掩码操作)
pip install opencv-python==4.10.0.84

第二步:用YOLO26完成目标检测,提取边界框

YOLO26在这里的核心作用是“定位”——快速找到图像中的目标,并输出边界框(XYXY格式)。这些边界框会作为SAM3的输入提示,告诉SAM3该聚焦哪些区域做分割。

核心代码

在这里插入图片描述

# 导入核心库
from ultralytics import YOLO  # YOLO模型核心接口
import cv2  # 图像读写
import numpy as np  # 数组和掩码处理

# 1. 加载预训练的YOLO26n模型(轻量化版本,速度快)
model = YOLO("YOLO26n.pt")

# 2. 定义待处理的图像路径(可批量添加)
image_paths = [
    "Inbal-Midbar 768.jpg",
    "Rahaf.jpg"
]
# 3. 批量读取图像到内存
imgs = [cv2.imread(path) for path in image_paths]

# 4. 运行YOLO26推理(一键检测目标)
print("开始目标检测,提取边界框...")
results = model(imgs)

# 5. 提取每张图的边界框(转XYXY格式的NumPy数组)
bboxes_list = [] 
for result in results:
    # 把YOLO输出的边界框转成可复用的数组格式
    boxes = result.boxes.xyxy.cpu().numpy()  
    bboxes_list.append(boxes)
    # 可视化检测结果(快速校验目标是否识别准确)
    result.show()  

# 打印边界框坐标(调试用,可注释)
for i , bboxes in enumerate(bboxes_list):
    print(f"第{i+1}张图的边界框(XYXY格式):")
    for bbox in bboxes:
        print(f"  {bbox}")

这一步的关键是拿到“可靠的边界框”——如果YOLO26没定位准,后续SAM3的分割结果也会跑偏,所以建议先通过result.show()可视化检测结果,确认目标都被框中。

第三步:用SAM3把边界框转成像素级掩码

SAM3是目前最易用的分割模型之一,只需传入“边界框提示”,就能精准分割出目标的轮廓。我们用Ultralytics封装的SAM接口,无需复杂配置,一键就能生成掩码。

核心代码

from ultralytics import SAM  # 导入SAM2模型接口
import matplotlib.pyplot as plt  # 可视化掩码

# 1. 加载SAM2预训练模型
sam_model = SAM("sam3.pt") 

# 2. 批量运行SAM2分割(用YOLO26的边界框做提示)
print("开始用SAM3进行目标分割...")
sam_results = [] 
for i , img_path in enumerate(image_paths):
    # 传入图像路径+对应边界框,生成掩码
    result = sam_model(img_path, bboxes=bboxes_list[i])
    sam_results.append(result)

第四步:合并掩码,生成二值结果

SAM3会为每个目标生成独立掩码,我们需要把这些掩码合并成一张二值图(目标区域为白色,背景为黑色),方便后续保存和使用。

核心代码

def create_binary_mask(image_path , results):
    # 读取原图,匹配掩码尺寸
    img = cv2.imread(image_path)
    h , w, _ = img.shape
    # 创建全黑的空掩码图
    mask_img = np.zeros((h, w), dtype=np.uint8)  

    # 遍历所有掩码,合并成一张图
    for result in results:
        if result.masks is not None:  # 确保掩码存在
            for mask in result.masks.data.cpu().numpy():
                # 把0-1的掩码值转成0-255的灰度图(白色表示目标)
                mask = (mask * 255).astype(np.uint8)  
                # 按位或运算,合并所有掩码
                mask_img = cv2.bitwise_or(mask_img, mask)

    return mask_img

# 可视化并保存最终掩码
for i , sam_result in enumerate(sam_results):
    # 生成二值掩码
    binary_mask = create_binary_mask(image_paths[i], sam_result)
    
    # 可视化掩码(更直观查看效果)
    plt.figure(figsize=(6,6))
    plt.imshow(binary_mask, cmap='gray')  # 灰度显示
    plt.axis('off')  # 隐藏坐标轴
    plt.title(f"第{i+1}张图的二值掩码")
    plt.show()

    # 保存掩码(路径自动拼接,方便批量处理)
    mask_save_path = image_paths[i].replace(".jpg", "_mask.jpg")
    cv2.imwrite(mask_save_path, binary_mask)
    print(f"第{i+1}张图的掩码已保存至:{mask_save_path}")

最终效果展示

处理后的掩码效果如下(左为掩码,右为原图):
在这里插入图片描述

总结

这套流水线的核心逻辑是“分工明确”:YOLO26负责快速定位目标,SAM3负责精准分割轮廓,两者结合既高效又精准。整个流程无需训练,直接用预训练模型就能跑,代码可直接复用在:

  • 数据集构建(批量生成目标掩码);
  • 背景移除(用掩码抠出目标);
  • 视觉质检(检测并分割缺陷区域);
  • 其他“先定位、后分割”的计算机视觉场景。

如果需要处理更多图片,只需扩展image_paths列表即可批量运行,新手也能快速上手。


在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐