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 osmodel = 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 = 0for 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 += 1crop_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'):breakcv2.destroyAllWindows()

请添加图片描述

2.2 分割裁剪

from ultralytics import YOLO
import cv2
import osmodel = 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 = 0for 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 += 1crop_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'):breakcv2.destroyAllWindows()

在这里插入图片描述

3. 视频裁剪

3.1 检测裁剪

from ultralytics import YOLO
import cv2
import osmodel = YOLO("yolov8n.pt")
names = model.namescap = 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.")breakresults = 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 += 1crop_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'):breakcap.release()
cv2.destroyAllWindows()

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

3.2 分割裁剪

from ultralytics import YOLO
import cv2
import osmodel = YOLO("yolov8n-seg.pt")
names = model.namescap = 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.")breakresults = 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 += 1crop_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'):breakcap.release()
cv2.destroyAllWindows()

结果:
请添加图片描述

3.3 实时裁剪

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

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

改为

cap = cv2.VideoCapture(0)

即可

4. 源码

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锂电池寿命预测 | Matlab基于GRU门控循环单元的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于GRU门控循环单元的锂电池寿命预测 Matlab基于GRU的锂电池剩余寿命预测 基于GRU的锂电池剩余寿命预测(单变量) 运行环境Matlab2020及以上 锂电池的剩余寿命预测是…

设计模式学习笔记 - 开源实战四(中):剖析Spring框架中用来支持扩展的设计模式

概述 上篇文章,学习了 Spring 框架背后蕴含的设计思想,比如约定优于配置、低侵入松耦合、模块化轻量级等等。这些设计思想可以借鉴到其他框架开发中,在大的设计层面提高框架的代码质量。 除了上篇文章降到的设计思想,实际上&…

C++——类和对象练习(日期类)

日期类 1. 构造函数和析构函数2. 拷贝构造和赋值运算符重载3. 运算符重载3.1 日期的比较3.2 日期加减天数3.3 日期减日期3.4 流插入和流提取 4. 取地址和const取地址重载5. 完整代码Date.hDate.c 对日期类进行一个完善,可以帮助我们理解六个默认成员函数&#xff0c…

【黑马头条】-day12项目部署和发布-jenkins

文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…

盲人过马路安全:科技力量赋予“隐形守护者”

作为一名资深记者,我始终关注着社会各群体的生活现状,尤其是那些面临特殊挑战的人群。今天,我想聚焦一个看似平常却对盲人构成重大困扰的日常场景——过马路,以及一款名为蝙蝠避障的辅助应用如何成为他们的盲人过马路安全的守护者…

Docker 部署 WordPress 并完成建站

什么是 WordPress WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一款个人博客系统,并逐步演化…

【Linux系统编程】第七弹---权限管理操作(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、修改文件权限的做法(一) 2、有无权限的表现 总结 上一弹我们讲解了Linux权限概念相关的知识,但是我们只知道有…

【C++学习】STL之空间配置器之一级空间配置器

文章目录 📊什么是空间配置器✈STL 提供六大组件的了解👀为什么需要空间配置器👍SGI-STL空间配置器实现原理🌂一级空间配置器的实现 📊什么是空间配置器 空间配置器,顾名思义就是为各个容器高效的管理空间…

python爬虫 - 爬取html中的script数据(从zum.com爬取新闻信息 )

文章目录 1. 分析页面内容数据格式2. 使用re.findall方法,编写爬虫代码3. 使用re.search 方法,编写爬虫代码 1. 分析页面内容数据格式 (1)打开 https://zum.com/ (2)按F12(或 在网页上右键 --…

Tomcat启动闪退疑难排解全攻略:资深技术视角详解(详细)

Tomcat 启动闪退问题是在尝试启动Apache Tomcat服务器时,遇到的一种情况,其中服务器进程无法正常运行并立即退出。这个问题可能是由于多种原因造成的,包括配置错误、端口冲突、类加载问题等。作为一个资深技术人员,解决这类问题需…

【Java网络编程】TCP通信(Socket 与 ServerSocket)和UDP通信的三种数据传输方式

目录 1、TCP通信 1.1、Socket 和 ServerSocket 1.3、TCP通信示例 2、UDP的三种通信(数据传输)方式 1、TCP通信 TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象 通信之前要保证连接已经建立(注意TCP是一…

PostgreSQL中的索引类型有哪些,以及何时应选择不同类型的索引?

文章目录 索引 解决方案和示例代码 PostgreSQL提供了多种索引类型,每种类型都有其特定的应用场景和优势。选择合适的索引类型可以显著提高查询性能,减少数据库负载。 索引 以下是PostgreSQL中常见的索引类型及其适用场景: 1. B-tree 索引 …