yolov8 裁剪检测结果

yolov8 裁剪检测结果

  • 1. 基础
  • 2. 图片批量裁剪
    • 2.1 检测裁剪
    • 2.2 分割裁剪
  • 3. 视频裁剪
    • 3.1 检测裁剪
    • 3.2 分割裁剪
    • 3.3 实时裁剪
  • 4. 源码

1. 基础

本项目是在 Windows+YOLOV8环境配置 的基础上实现的
思路:将检测得到的物体边框提取,然后边框裁剪原图,并把裁剪后的结果保存在文件夹

2. 图片批量裁剪

2.1 检测裁剪

from ultralytics import YOLO
import cv2
import os

model = YOLO("yolov8n.pt")
names = model.names

# 获取文件夹中所有图像文件的路径
image_files = [os.path.join("./ultralytics/assets", f) for f in os.listdir("./ultralytics/assets") if f.endswith(".jpg") or f.endswith(".png")]
crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

idx = 0

for image_file in image_files:
    # 读取图像
    im0 = cv2.imread(image_file)
    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotated_frame = results[0].plot()

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            crop_obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
            cv2.imwrite(os.path.join(crop_dir_name, str(idx)+".png"), crop_obj)

    cv2.imshow("ultralytics", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

请添加图片描述

2.2 分割裁剪

from ultralytics import YOLO
import cv2
import os

model = YOLO("yolov8n-seg.pt")
names = model.names

# 获取文件夹中所有图像文件的路径
image_files = [os.path.join("./ultralytics/assets", f) for f in os.listdir("./ultralytics/assets") if f.endswith(".jpg") or f.endswith(".png")]
crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

idx = 0

for image_file in image_files:
    # 读取图像
    im0 = cv2.imread(image_file)
    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotated_frame = results[0].plot()

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            crop_obj = annotated_frame[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
            cv2.imwrite(os.path.join(crop_dir_name, str(idx)+".png"), crop_obj)

    cv2.imshow("ultralytics", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

在这里插入图片描述

3. 视频裁剪

3.1 检测裁剪

from ultralytics import YOLO
import cv2
import os

model = YOLO("yolov8n.pt")
names = model.names

cap = cv2.VideoCapture("./ultralytics/assets/a2.mp4")
assert cap.isOpened(), "Error reading video file"

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

idx = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotated_frame = results[0].plot()

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            crop_obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
            cv2.imwrite(os.path.join(crop_dir_name, str(idx)+".png"), crop_obj)

    cv2.imshow("ultralytics", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

结果:
在这里插入图片描述

3.2 分割裁剪

from ultralytics import YOLO
import cv2
import os

model = YOLO("yolov8n-seg.pt")
names = model.names

cap = cv2.VideoCapture("./ultralytics/assets/a2.mp4")
assert cap.isOpened(), "Error reading video file"

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

idx = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotated_frame = results[0].plot()

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            crop_obj = annotated_frame[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
            cv2.imwrite(os.path.join(crop_dir_name, str(idx)+".png"), crop_obj)

    cv2.imshow("ultralytics", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

结果:
请添加图片描述

3.3 实时裁剪

如果想打开摄像头实时裁剪只许把视频裁剪中的

cap = cv2.VideoCapture("./ultralytics/assets/a2.mp4")

改为

cap = cv2.VideoCapture(0)

即可

4. 源码

可以去 Windows+YOLOV8环境配置 下载源码,然后在主目录创建一个py文件,把上边代码贴进去运行即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/566883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python网络数据抓取(3):Requests

引言 在这一部分,我们将探讨Python的requests库,并且利用这个库来进行网页数据抓取。那么,我们为何需要这个库,以及怎样利用它呢? requests库是广受大家欢迎的一个库,它是下载次数最多的。这个库使我们能够…

直流负载在新能源领域的作用有哪些

直流负载在新能源领域的作用主要体现在以下几个方面: 新能源如太阳能、风能等,其发电过程中产生的电能为直流电。传统的电力系统主要采用交流电,因此在新能源并网时需要进行逆变器转换。然而,逆变器在转换过程中会存在一定的能量损…

设计模式-模板模式

模板设计模式 定义 在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单来说,有多个子类共有的方法,且逻辑相同,可以考虑作为模板方法。 模板的价值就在于骨架的定义,骨架内部将问题…

手写基于redis-lua脚本实现分布式id生成器starter

手写基于redis-lua脚本实现分布式id生成器starter 文章目录 1.前言2.实现思路2.1lua脚本的特性2.2 了解三个redis命令2.3集群自增序列实现原理2.4三种实现思路2.4.1 实现思路一2.4.2 实现思路二2.4.3实现思路三 3.项目工程目录4.源码仓库地址5.依赖及使用配置5.1依赖5.2nacos配…

科研基础与工具(论文写作)

免责申明: 本文内容只是学习笔记,不代表个人观点,希望各位看官自行甄别 参考文献 科研基础与工具(YouTube) 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候,不不知道怎么…

机器学习基础-PR\ROC\F1

1 1 、ROC曲线2 、PC曲线3、F14 、正负样本不均衡时怎么选择 1 、ROC曲线 就是TPR 与FPR 曲线 如图,就是根据阈值不同,我们看我们的二分类器的结果,根据结果算出TPR(真阳性)与FPR(假阳性),最好的情况就是如图,我们的…

2024年三支一扶报名照上传要求很严格

2024年三支一扶报名照上传要求很严格

2024年最新版云开发cms开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了,搞得石头哥不得不紧急的再新出一版,教大家开通最新版的cms网页管理后台 一,技术选型和技术点 1,小程序前端 wxml css JavaScript MINA原生小程序框架 2,数据库 云开发 云数据库 云…

合合信息Embedding模型:引领中文文本向量化技术新高度

目录 🍅前言🍓赛事含金量🍓Embedding技术简介🍓Embedding在大模型中的价值🍓合合信息Embedding模型特点及优势🍓合合信息Embedding模型测试🍓技术突破🍓公司介绍 🍅总结 …

360在线翻译免费API

一、需求: 根据360在线翻译,获取免费API,并调用 二、主要步骤 1、请求 url url "https://fanyi.so.com/index/search" 2、传入信息 datas {"query": "桌子"} 3、请求头 headers {"pro": &…

Axure糖尿病健康管理APP原型 (知识科普/病友社区/远程医生会诊/购物商城/血糖监测/饮食监测)

作品概况 页面数量:共 50 页 源文件格式:rp格式,兼容 Axure RP 9/10,非程序软件无源代码 应用领域:医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图,设计规范内容清晰…

第54篇:创建Platform Designer系统

Q:本期我们开始使用Platform Designer工具创建带IP核的FPGA自定义硬件系统。 A:Platform Designer是集成在Quartus软件里的系统设计工具,名称随着Quartus的不断更新曾命名为SOPC Builder和Qsys。 使用Platform Designer可以添加Quartus已有自…

Aigtek高压放大器在电活性聚合物中的作用是什么

电活性聚合物是一类特殊类型的聚合物,其性质和形状可以受到外部电场的调控。这些聚合物在多个领域中有着广泛的应用,包括人工肌肉、电动液体透镜、柔性电子、生物医学传感器等。高压放大器在电活性聚合物的研究和应用中扮演着关键的角色,下面…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明 文章编号&am…

C#-使用Harmony库实现DLL文件反射调用

一. Harmony工作原理 利用C#运行时Runtime的反射机制,动态加载dll中的方法,字段,属性,实现对DLL方法的重写和代码注入。 二. Harmony下载及安装 1.下载Harmony_lib库lib.harmony.2.3.3.nupkg 霸王•吕布 / CSharpHarmonyLib GitCodehttps://gitcode.net/qq_35829452/csharph…

南京邮电大学数学实验A答案 | 《MATLAB数学实验》第三版课后习题答案

数学实验A 本仓库收集了2024年我在学习《数学实验A》课程期间完成的作业。课程使用的教材为《MATLAB数学实验》第三版,作者为胡良剑和孙晓君教授。 这个资源库的建立初衷是为了帮助南京邮电大学的同学们在学习过程中有一个参考的依据,减少一些无端浪费…

【网络编程】UDP实现回显服务器

一.网络编程的基本术语. 客户端 客户端是为用户提供本地服务的程序,通常位于用户设备上。也称为用户端,是相对于服务器而言的。它主要指安装在用户设备上的程序,这些程序能够与服务器进行通信,从而获取服务或者执行特定功能。在…

虚拟机中安装的CentOS7的桌面右上角没有网络图标解决方案

问题描述 今天在打开CentOS7后,发现右上角的网络图标不见了,然后命令行访问百度也不通。然后上网查了一些解决方法。 原因分析及解决方案: 上网查了许多解决方法,其中一种成功解决了我的问题;我的是配置文件的问题。…

双链向表专题

1.链表的分类 链表的种类非常多组合起来就有 2 2 8种 链表说明: 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构: 单链表 和 双向带头循环链表 1. 无头单向⾮循环链表:结构简单,⼀般不会单独⽤来存数…

在linux系统中启动pycharm

1.找到pycharm的安装路径,一般在下载文件夹中 2.进入pycharm的安装路径,进入bin目录 3.右击,打开终端,输入./pycharm.sh