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

import os
import cv2

def 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]) * width
        y_center = float(parts[2]) * height
        img_width = float(parts[3]) * width
        img_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+=1

def 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.mfbz.cn/a/771390.html

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

相关文章

初阶数据结构之二叉树

那么本篇文是初阶数据结构这个系列的最后一篇文章,那么闲话少叙,我们直接进入正题 在讲二叉树的一些之前知识点之前,我先给大家送个小礼物哈 手搓二叉树 typedef int BTDataType ; typedef struct BinaryTreeNode { BTDataType _data …

Mybatis-Plus eq ne gt lt ge le分别代表含义 条件构造器

一、条件构造器函数列表 函数名说明说明/例子allEq入参都满足条件例:allEq({"id": 1, "name": "张三", "age": null})--->id 1 and name 张三 and age is nulleq等于例:eq("name", "张三…

dc-3靶机渗透

环境准备 dc-3靶机下载链接: https://download.vulnhub.com/dc/DC-3-2.zip 启动靶机遇到的问题解决文章在下面 http://t.csdnimg.cn/zLQAI kali最新版 dc-3靶机 两台机器都在vmware上运行 网络设置NAT模式 渗透过程 信息收集 首先使用ifconfig获取kali的IP地址 可…

day04-组织架构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息,可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

CSS filter(滤镜)属性,并实现页面置灰效果

目录 一、filter(滤镜)属性 二、准备工作 三、常用的filter属性值 1、blur(px) 2、brightness(%) 3、contrast(%) 4、grayscale(%) 5、opacity(%) 6、saturate(%) 7、sepia(%) 8、invert(%) 9、hue-rotate(deg) 10、drop-shadow(h-shadow v…

【Godot4.2】用PlantUML和语雀画UML类图

概述 UML:统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。PlantUML:是一个开源工具,它允许我们用文本形式来描绘和创建UML图。在VSCode中可以安装扩展来绘制,而在语雀的MarkDown编辑器中&#xff…

震惊!运气竟能如此放大!运气的惊人作用,你了解吗?

芒格:得到你想要的东西,最保险的办法,就是让自己配得上你想要的那个东西。今天仔细想了想这句话,他其实说的是无数成功人士的心声 —— “我配得上!” 美剧《绝命毒师》有个导演叫文斯吉里根(Vince Gilliga…

如何看待制造业数字化转型?从不同维度来聊一聊

作为一名TOB行业9年经验的老兵,近期我们团队拜访了不少制造企业,其以中小型企业居多,在与企业负责人交流数字化转型话题时,感触最多的还是管理者对“数字化转型”的认知。在数字化转型方面从国家层面到地方政府进行大量的宣传与政…

数据结构 1.1 数据结构的基本概念

本章总览: 一.什么是数据 1.数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程 序识别和处理的符号的集合。数据是计算机程序加工的原料。 早期计算机只能处理纯数值的问题,如世界第一题计算机ENI…

【京存】AI人工智能时代的分布式存储

如今,AI人工智能的浪潮席卷全球,数据以前所未有的速度增长与积累。如何高效存储、管理和利用海量数据,成为推动AI发展的关键。 今日,我们将为您深度剖析AI人工智能分布式存储方案,伴随AI技术在图像识别、自然语言处理…

金融(基金)行业信创国产化特点及统一身份认证解决方案

金融业在政策支持及自主驱动下,金融信创取得快速发展。从2020年开始,三期试点已扩容至5000余家,进入全面推广阶段。而基金行业信创建设与银行、证券、保险这些试点行业相比,进展较为缓慢。 基金行业信创当前面临的问题 与多家基…

百度出品_文心快码Comate提升程序猿效率

1.文心快码 文心快码包含指令、插件 和 知识三种功能, 1)指令包含Base64编码、Base64解码、JSON转TS类型、JSON转YAML、JWT解码喂JSON。 2)插件包含 3)指令包含如下功能: 官网链接

SQL Server 2022的组成

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…

盘点几款国产AI高效神器!打工人赶紧码住

在这个AI技术飞速发展的时代,国产AI工具正成为提升工作效率的得力助手。作为AI工具测评博主,米兔有幸体验了多款国产AI工具,今天要向大家介绍几款超级好用的AI工具。这些工具不仅功能强大,而且操作简便,是职场人士不可…

贵的智能猫砂盆值得买吗?包含百元、千元的高性价比品牌推荐!

对于养猫的上班族来说,智能猫砂盆真的是越早买越好,普通猫砂盆用这么久下来能把我们这些上班的都累死,每次一回到家就能闻到猫屎的臭味,一看就收获猫砂盆里满满当当的猫屎,在外面要上班,在家里也要给猫上班…

API-正则表达式

学习目标: 掌握正则表达式 学习内容: 什么是正则表达式语法元字符修饰符 什么是正则表达式: 正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。 通常用来查找、替换那些符合正则表达式的文本&a…

二叉树的链式访问 与 二叉树专题

目录 二叉树的前、中、后序遍历求二叉树第K层节点的个数二叉树查找值为x的节点leetcode相同的树对称二叉树二叉树的前序遍历另一棵子树牛客 二叉树的遍历 二叉树的前、中、后序遍历 1.前序遍历:先访问根节点,再访问左子树,最后访问右子树 根…

# windows 安装 mysql 显示 no packages found 解决方法

windows 安装 mysql 显示 no packages found 解决方法 一、问题描述: 安装 mysql 时,出现 no packages found 不能进行下一步安装了, 如下图: 二、解决方法: 1、路径问题,系统不能识别你的安装包路径&…

MTK6769芯片性能参数_MT6769规格书_datasheet

联发科MT6769处理器采用了台积电12nm工艺。它具有8核CPU,采用2Cortex A75 2.0GHz 6Cortex A55 1.7GHz的构架。该处理器搭载了Mali-G52 MC2 GPU,运行速度高达820MHz,能够提供出色的图形处理性能。此外,MT6769还提供高达8GB的快速L…

无法启动此程序,因为计算机中丢失 api-ms-win-crt-string-11-1-0.dl。尝试重新安装该程序以解决此问题。

在windows server2012系统中利用WinSW部署jar包时,报错:无法启动此程序,因为计算机中丢失 api-ms-win-crt-string-11-1-0.dl。尝试重新安装该程序以解决此问题。 原因: 缺少Microsoft Visual C 2015运行库或者已安装低版本运行库…