OpenCV——实现裁剪YOLO格式的图片目标并按图片名保存

import os
import cv2def crop_image(image_path, label_path, output_folder):# 读取图片img = cv2.imread(image_path)height, width, _ = img.shape# 读取标签文件with open(label_path, 'r') as file:labels = file.readlines()img_id = 1# 遍历每个标签for label in labels:parts = label.strip().split()class_id = int(parts[0])x_center = float(parts[1]) * widthy_center = float(parts[2]) * heightimg_width = float(parts[3]) * widthimg_height = float(parts[4]) * height# 计算左上角坐标x1 = int(x_center - (img_width / 2))y1 = int(y_center - (img_height / 2))# 确保裁剪区域在图片范围内x1 = max(0, x1)y1 = max(0, y1)x2 = min(width, x1 + img_width)y2 = min(height, y1 + img_height)# 裁剪图片cropped_img = img[int(y1):int(y2), int(x1):int(x2)]# 保存裁剪后的图片cv2.imwrite(os.path.join(output_folder, f"{img_id}.jpg"), cropped_img)img_id+=1def main():images_folder = r'E:\BaiduNetdiskDownload\20240616\Add_Dataset\Add_Building_20240616\images'labels_folder = r'E:\BaiduNetdiskDownload\20240616\Add_Dataset\Add_Building_20240616\labels'output_base_folder = r'E:\BaiduNetdiskDownload\20240616\Add_Dataset\Add_Building_20240616\cut_imgs'# 确保输出目录存在if not os.path.exists(output_base_folder):os.makedirs(output_base_folder)# 遍历images文件夹中的所有图片for image_filename in os.listdir(images_folder):if image_filename.lower().endswith(('.png', '.jpg', '.jpeg')):# 构建图片和标签的完整路径image_path = os.path.join(images_folder, image_filename)label_filename = image_filename.replace('.jpg', '.txt').replace('.jpeg', '.txt').replace('.png', '.txt')label_path = os.path.join(labels_folder, label_filename)# 确保标签文件存在if os.path.exists(label_path):# 以图片的名字为文件夹名创建输出目录output_folder = os.path.join(output_base_folder, os.path.splitext(image_filename)[0])if not os.path.exists(output_folder):os.makedirs(output_folder)# 裁剪图片crop_image(image_path, label_path, output_folder)if __name__ == '__main__':main()

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

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

相关文章

如何提高实验室分析结果的准确性呢

要提高实验室分析结果的准确性,可以从以下几个方面着手: 1、选择合适的实验方法 不同的实验方法具有不同的优缺点,实验方法的准确度直接影响测定结果的准确度。因此,在选择实验方法时,需要根据实验目的、实验原理、实…

spring security + vue,登录功能

前端代码:https://gitee.com/forgot940629/vuelogin 后端代码:https://gitee.com/forgot940629/springbootloginv2 参考代码:https://github.com/PuZhiweizuishuai/SpringSecurity-JWT-Vue-Deom 基于前后端分离实现登录功能。登录成功后后端向…

Java for循环倒序输出

1.实现一个for循环的倒序输出 在Java中,要实现一个for循环的倒序输出,通常我们会使用数组或集合(如ArrayList)作为数据源,然后通过倒序遍历这个数组或集合来实现。下面,我将给出一个详细的示例&#xff0c…

Linux高并发服务器开发(十一)UDP通信和本地socket通信

文章目录 1 TCP和UDP的区别2 UDPAPI流程服务端流程客户端流程 代码服务端客户端 3 本地socket通信服务端客户端客户端代码 1 TCP和UDP的区别 2 UDP API 流程 服务端流程 客户端流程 代码 服务端 #include<sys/socket.h> #include<stdio.h> #include<arpa/in…

二叉树与堆相关的时间复杂度问题

目录 满二叉树与完全二叉树高度h和树中节点个数N的关系 向上调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向下调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向上调整建堆&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a;…

Redis 集群 三主三从 主节点之间数据不会同步说明

Redis 集群中有一个特性&#xff0c;它不使用强一致性模型&#xff0c;而是使用最终一致性。Redis 集群通过分区 (sharding) 的方式来存储数据&#xff0c;不同的键可能会被存储在不同的节点上。每个键通过一个哈希槽 (hash slot) 来决定应该被存储到哪个节点上。一个 Redis 集…

Java中怎么使用httpclick发送application/x-www-form-urlencoded请求并接收text/xml数据呢?

项目中遇到一个请求方式要求&#xff1a; 1 、POST 请求 2 、Content-Type: text/xml; charsetutf-8 项目是Java代码 使用的httpclick发送的请求&#xff0c;接下来让我看下如何实现&#xff0c;本部分只提供核心请求代码&#xff0c;之前分享过httpclick发送请求工具类&…

CPU的核心数和线程数

CPU的核心数和线程数 一、关系&#xff1a; 1、线程数可以模拟出不同的CPU核心数。 CPU的核心数指的是硬件上存在着几个核心&#xff0c;而线程数可以模拟出多个核心数的功能。线程数越多&#xff0c;越有利于同时运行多个程序&#xff0c;因为线程数等同于在某个瞬间CPU能同…

【C++】POCO学习总结(二十):交叉编译poco-1.12.5p2

1、版本说明 1.1 poco-1.13 截止2024-07-03&#xff0c;POCO的稳定版本最高为poco-1.13.3&#xff0c;注意从poco-13.0开始需要编译器支持C17&#xff0c;否则编译时报错。 常见报错有&#xff1a; 1&#xff09;std::string的append重载版本问题&#xff0c;报错信息如下 …

Golang 基于 archive/zip 包实现文件

这里写自定义目录标题 摘要引言Go语言简介archive/zip 包概述&#xff1a;环境准备基础概念&#xff1a;压缩的基本概念&#xff1a;解压缩的基本概念&#xff1a;ZIP格式的特点&#xff1a;ZIP文件的组成&#xff1a;使用ZIP的优点&#xff1a; 使用 archive/zip 包进行文件压…

利用Arcgis绘制克吕金插值图

工作中我们常用到克吕金插值图&#xff0c;下面简单介绍下使用Arcmap绘制克吕金插值图的方法及注意事项&#xff0c;希望能帮到大家。 一、准备工作 软件&#xff1a;Arcgis 数据&#xff1a;点图层、研究范围 二、操作步骤 1 添加数据 打开Arcmap&#xff0c;从添加位置将…

WIN32核心编程 - 进程操作(二) 遍历进程 - 进程通信

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 遍历进程 CreateToolhelp32Snapshot EnumProcesses NtQuerySystemInformation 进程通信 clipboard FileMapping NamedPipe Mailslot 遍历进程 CreateToolhelp32Snapshot #include &l…

JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理

JAVA数字化产科管理平台源码&#xff1a;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理 智慧产科管理系统是基于自主研发妇幼信息平台&#xff0c;为医院产科量身打造的信息管理系统&#xff0c;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全…

Go语言实现的端口扫描工具示例

Go语言实现的端口扫描工具示例 创建一个端口扫描工具涉及到网络编程和并发处理&#xff0c;下面是一个简单的Go语言实现的端口扫描工具示例。这个工具会扫描指定IP地址的指定范围内的端口。 请注意&#xff0c;使用端口扫描工具可能会违反某些网络的使用条款&#xff0c;甚至…

企商在线出席2024全球数字经济大会城市副中心论坛

2024年7月3日&#xff0c;2024全球数字经济大会城市副中心论坛“数字基础设施绿色创新发展分论坛”在北京市通州区成功举办。企商在线产品及解决方案总监孙杰受邀出席本次会议&#xff0c;并参与圆桌对话环节&#xff0c;分享“绿色”发展思路与经验。 2024全球数字经济大会城市…

FFMpeg rtmp 无压缩推送本地yuv文件 压缩推送本地yuv文件

可以借鉴的&#xff1a;C使用FFmpeg实现YUV数据编码转视频文件_C 语言_脚本之家 yuv文件下载地址&#xff1a;YUV Sequences 无压缩的方式推送本地yuv文件 代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <iostream> extern "C&…

【代码随想录02】977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

977. 有序数组的平方 题目描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 做题思路 由于原数组存在负数&#xff0c;所以平方后最大值可能出现在两端。因此可以采用双指针法&#xf…

身边有填报志愿需求别错过!张雪峰透露今年志愿填报技巧:报专业,别报行业!(文末附稳定高薪专业推荐)

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求&#xff0c;而不是盲目跟风报考所谓的"热门专业"。 今天跟大家分…

期权开户零门槛怎么操作?期权不满50w的开户方式

今天带你了解期权开户零门槛怎么操作&#xff1f;期权不满50w的开户方式。在股票期权市场上&#xff0c;期权交易是一种非常受欢迎的投资方式。它不仅可以增加投资组合的多样性&#xff0c;还可以为投资者提供一定的保护和利润机会&#xff0c;比如通过买入认股期权做空对冲大盘…

如何选择视频号矩阵系统:打造高效短视频内容生态的指南

在短视频内容创作和分发的热潮中&#xff0c;视频号矩阵系统作为一种高效的管理工具&#xff0c;受到了越来越多创作者和品牌的青睐。它通过集中管理多个视频号&#xff0c;优化内容发布流程&#xff0c;帮助用户提升工作效率和内容影响力。本文将探讨如何选择一个合适的视频号…