【附源码】YOLOv8:批量处理图片与目标检测裁剪

系列文章目录

机器学习:批量处理图片与目标检测裁剪


文章目录


前言

提示:这里可以添加本文要记录的大概内容:

YOLOv8是一个高效且准确的目标检测模型,能够实现对图像中物体的检测和定位。根据需求,我们希望使用YOLOv8模型通过返回的坐标来裁剪标签内容图片,并将其保存到本地。下面内容是一个基于Python的实现方法,该方法使用了ultralytics库来加载和运行YOLOv8模型,并对检测到的物体进行裁剪和保存操作。


一、单一照片处理与裁剪

1.源代码

代码如下(示例):

python 复制代码
from ultralytics import YOLO
import cv2
import os

# 加载模型,根据实际使用的模型进行替换
model = YOLO("yolov8n.pt")

# 假设已经有了要处理的图像路径列表
image_files = ['path/to/your/image1.jpg']
#image_files = ['path/to/your/image1.jpg', 'path/to/your/image2.jpg']

# 指定裁剪图像的保存目录
crop_dir_name = "save"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

# 对每张图像进行处理
for image_file in image_files:
    # 读取图像
    im0 = cv2.imread(image_file)
    
    # 使用模型进行预测,不显示结果
    results = model.predict(im0, show=False)
    
    # 获取检测结果中的边界框
    boxes = results[0].boxes.xyxy.cpu().numpy()  # xyxy格式的边界框坐标
    clss = results[0].boxes.cls.cpu().numpy()  # 检测到的类别编号
    
    # 遍历每个检测到的物体
    for box, cls in zip(boxes, clss):
        # 根据边界框坐标裁剪图像
        crop_obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
        
        # 保存裁剪后的图像到指定目录
        save_path = os.path.join(crop_dir_name, f"{os.path.basename(image_file)}_{cls}.png")
        cv2.imwrite(save_path, crop_obj)

# 注意:上述代码中的"yolov8n.pt"是模型权重文件的路径,根据实际情况替换为的模型文件路径。

2.代码分析

这段代码首先加载了YOLOv8模型,然后对指定目录下的每张图像进行处理,使用模型检测图像中的物体,并将检测到的物体根据边界框坐标进行裁剪,最后将裁剪后的图像保存到本地目录中。


二、多个照片处理与裁剪(指定文件夹)

1.源代码

代码如下(示例):

python 复制代码
from ultralytics import YOLO
import cv2
import os
import numpy as np

# 初始化YOLOv8模型,这里使用yolov8n.pt作为示例
model = YOLO("best.pt")

# 指定包含图片的文件夹路径
image_folder = 'C:xxx/保存照片地点'

# 指定裁剪后图片的保存目录
crops_folder = 'C:xxx/推理照片地点'
if not os.path.exists(crops_folder):
    os.makedirs(crops_folder)

# 获取所有图片文件的路径
image_files = [os.path.join(image_folder, f) for f in os.listdir(image_folder) if
               f.endswith(('jpg', 'png', 'jpeg', 'bmp'))]

# 遍历所有图片文件
for image_file in image_files:
    # 读取图片
    im0 = cv2.imread(image_file)
    if im0 is None:
        print(f"Warning: {image_file} is not a valid image and will be skipped.")
        continue

    # 使用模型进行预测,不显示结果
    results = model.predict(source=image_file, show=False)  # 确保source参数正确传递

    # 检查results是否为列表
    if isinstance(results, list):
        # 遍历每个检测结果
        for result in results:
            # 获取边界框和类别
            boxes = result.boxes.xyxy.cpu().numpy()  # 获取xyxy格式的边界框坐标
            clss = result.boxes.cls.cpu().numpy()    # 获取检测到的类别编号

            # 裁剪和保存图片
            for idx, (box, cls) in enumerate(zip(boxes, clss)):
                x1, y1, x2, y2 = box
                crop_img = im0[int(y1):int(y2), int(x1):int(x2)]

                # 保存裁剪后的图片
                save_path = os.path.join(crops_folder, f"{os.path.basename(image_file).split('.')[0]}_{idx}_{int(cls)}.png")
                cv2.imwrite(save_path, crop_img)
                print(f"Saved cropped image to {save_path}")
    else:
        print(f"No detection results for {image_file}")

print("Image processing completed.")

2.代码分析

这段代码会遍历指定文件夹中的所有图片文件,对每张图片使用YOLOv8模型进行目标检测,并将检测到的每个物体裁剪成单独的图片,保存到指定的文件夹中。图片的命名格式为原始图片名称加上检测到物体的索引和类别编号。

记得替换image_folder和crops_folder为自己的图片文件夹路径和裁剪图片的保存路径。此外,根据自己的YOLOv8模型文件的实际路径,调整YOLO()构造函数中的参数。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了YOLOv8批量处理图片与目标检测裁剪的方法,如果对您有帮助,还请点个赞吧 (OvO)

相关推荐
学习前端的小z20 分钟前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
埃菲尔铁塔_CV算法1 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR1 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️1 小时前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠1 小时前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon2 小时前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
羊小猪~~2 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习