yolov7裁剪出识别结果

2023-10-31

开头先附上两篇有关yolov7的使用教程
①yolov7保姆级教程:链接
②yolov7数据增强与数据划分:链接

本篇主要内容为:在识别出来目标照片后,对目标进行裁剪

1.准备照片与标签

标签的生成在执行代码中加入–save-txt,完整命令如下:

python detect.py --weights .\runs\train\yolov72\weights\best.pt --source .\datasets\findcontact\testImages\ --save-txt

上面的文件路径根据实际情况修改即可
执行后,会生成一个labels文件,里面是yolo格式的标签,将labels与图片放到同一个文件夹
在这里插入图片描述

2.代码

代码部分是转载。
根据实际情况,修改文件路径即可。w、h的值,根据需要可自行调整。

# -*- coding: utf-8 -*-
# @Author  : 大叔azhe
# @Time    : 2022/9/12 20:00
# @Function:图片裁剪
import os
import cv2
import shutil
def caijian():
    # 仅支持JPEG,PNG,JPG格式图片
    path = "D:/jmcode/2/yolov7-main/runs/detect/exp5/labels"  # jpg图片和对应的生成结果的txt标注文件,放在一起
    path3 = "D:/jmcode/2/yolov7-main/runs/detect/exp5/cut/roi"  # 裁剪出来的小图保存的根目录
    path6 = "D:/jmcode/2/yolov7-main/runs/detect/exp5/cut"  # 裁剪出来的小图保存的根目录
    w = 4000  # 原始图片resize
    h = 4000
    img_total = []
    txt_total = []
 
    file = os.listdir(path)
    for filename in file:
        first, last = os.path.splitext(filename)
        # if (last in [".jpg",".jpeg","png"]  ):  # 图片的后缀名
        #     img_total.append(first)
        # # print(img_total)
        # else:
        #     txt_total.append(first)
 
        if (last in [".txt"]):  # 图片的后缀名
            txt_total.append(first)
            # print(img_total)
        else:
            img_total.append(first)
    if os.path.exists(path3):
        shutil.rmtree(path3)
        os.mkdir(path3)
    else:
        os.mkdir(path3)
 
    for img_ in img_total:
        if img_ in txt_total:
            filename_img = img_ + ".jpg"  # 图片的后缀名
            # print('filename_img:', filename_img)
            path1 = os.path.join(path, filename_img)
            a = os.path.exists(path1)
            if (a == False):
                filename_img = img_ + ".jpeg"  # 图片的后缀名
                # print('filename_img:', filename_img)
                path1 = os.path.join(path, filename_img)
                a = os.path.exists(path1)
            if (a == False):
                filename_img = img_ + ".png"  # 图片的后缀名
                # print('filename_img:', filename_img)
                path1 = os.path.join(path, filename_img)
                a = os.path.exists(path1)
            print("文件是否存在{}".format(a))
            img = cv2.imread(path1)
 
            img = cv2.resize(img, (w, h), interpolation=cv2.INTER_CUBIC)  # resize 图像大小,否则提取先验框时因原图差异区域可能会报错
            filename_txt = img_ + ".txt"
            # print('filename_txt:', filename_txt)
            n = 1
            with open(os.path.join(path, filename_txt), "r+", encoding="utf-8", errors="ignore") as f:
                for line in f:
                    aa = line.split(" ")
                    x_center = w * float(aa[1])  # aa[1]左上点的x坐标
                    y_center = h * float(aa[2])  # aa[2]左上点的y坐标
                    width = int(w * float(aa[3]))  # aa[3]图片width
                    height = int(h * float(aa[4]))  # aa[4]图片height
                    lefttopx = int(x_center - width / 2.0)
                    lefttopy = int(y_center - height / 2.0)
                    roi = img[lefttopy + 1:lefttopy + height + 3,
                          lefttopx + 1:lefttopx + width + 1]  # [左上y:右下y,左上x:右下x] (y1:y2,x1:x2)需要调参,否则裁剪出来的小图可能不太好
                    print('roi:', roi)
                    filename_last = img_ + "_" + str(n) + ".jpg"  # 裁剪出来的小图文件名
                    # print(filename_last)
                    path2 = os.path.join(path6, "roi")  # 需要在path3路径下创建一个roi文件夹
                    print('path2:', path2)  # 裁剪小图的保存位置
                    cv2.imwrite(os.path.join(path2, filename_last), roi)
                    n = n + 1
        else:
            continue
if __name__ == '__main__':  
    caijian() 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolov7裁剪出识别结果 的相关文章

随机推荐

  • 关于MinGW和MSYS

    MinGW是Minimalist GNU for Windows的缩写 是本地Windows应用的极简开发环境 MinGW为本地MS Windows应用的开发提供了完整的开源编程工具集 而且不依赖于第三方C运行时DLL 它确实依赖于很多由微
  • gitee新建仓库并上传项目

    目录 一 新建仓库 二 克隆仓库到本地 三 本地添加项目文件 四 上传至gitee仓库 五 提交代码 更新至远程仓库 一 新建仓库 1 点击右上角的 号 新建仓库 2 填写仓库信息 点击创建即可 二 克隆仓库到本地 1 点击 克隆 下载 S
  • python 用随机森林模型补充数值变量缺失值

    对数据建模之前 填补缺失值是必不可少的一步 这里把用随机森林模型快速预测缺失值的方法总结如下 以方便日后的工作 data df DataFrame类型的数据 obj column 待填补缺失值的列名 missing other column
  • Android开发 亲测可用--多种方式获取手机短信验证码自动填入

    Android开发 静态注册 动态注册 短信中心库监控获取手机验证码 自动复制到剪切板或或填入输入框 友情提醒初学者 这是广播接收器的类 写在xml中静态注册或写在启动类的Oncreate方法下动态注册即可 有新短信通知就会触发 若使用正常
  • Latex常用数学符号

    相关参考 常用数学符号的 LaTeX 表示方法 Latex所有常用数学符号整理 CSDN latex插入图片的文章 Side by side figures in LaTex 可以复制的特殊符号表 数学模式重音符号 hat a hat a
  • 电路分析笔记-电阻电路的等效变换

    电路的等效变换 两端网络 网络 任何一个复杂的电路 向外引出两个端钮 且从一个端子流入的电流等于从另一端子流出的电流 则称这一电路为二端网络 或一端口网络 两端电路等效的概念 两个两端电路 端口具有相同的电压 电流关系 则称它们是等效的电路
  • T5的整体介绍【代码实战】

    T5的整体介绍 代码实战 0 前言 1 Header 2 summary 3 T5 model 3 1 forward 3 2 预训练任务 3 2 1 multi sentence pairs 3 3 完成 tasks 0 前言 本文是对T
  • python语法(高阶)-工厂模式

    参考内容 黑马程序员
  • 李宏毅 机器学习2020 作业5 hw5-explainAI

    本次作业做的是解释机器学习是如何识别一张图片的 用到了上一次CNN作业训练好的模型 先导入需要用得到的库 其中lime需要提前安装 我在安装的时候 conda install命令不能使用 但是使用pip命令就可以安装了 import os
  • 关于代码的注释的几种方法

    注释就是对代码的解释和说明 其目的是让人们能够更加轻松地了解代码 注释是编写程序时 写程序的人给一个语句 程序段 函数等的解释或提示 能提高程序代码的可读性 注释只是为了提高可读性 不会被计算机编译 注释一般分为行注释和块注释 行注释是在某
  • 那些上线MES系统的企业都怎么样了?

    MES系统即制造企业生产过程执行系统 是一套面向制造企业车间执行层的生产信息化管理系统 在智能制造 工业4 0的时代背景下 MES生产管理系统成为制造业纷纷上线的管理软件 旨在提高企业整体生产效率和降低成本 那么企业上线MES系统后的具体有
  • 开源情报分析(OSINT)CTF社工类2万字题详细教程,请不要利用本文章做不道德的事,后果概不负责

    简介 现在国内外最新的ctf比赛都有这个项目了 列如给你一个照片找地址或者人名 给你一个名字找他的社交账号什么的 考验选手的信息收集与社工能力 这篇文章对这类题型做一个基础的总结 以后遇到这种题型就知道该怎么做了 本文章会教你们关于查找有关
  • Protobuf(Protocol Buffers)超详细入门教程(跨平台序列化, Java)——更新于2022.01

    目录 相关教程 相关文献 安装 C Installation Unix 环境 Protobuf3 0基础上手例子 相关教程 Protobuf Protocol Buffers 超详细入门教程 跨平台序列化 C CMake 更新于2022 0
  • 经典的图像去噪算法_NeuNet2020:BRDNet(开源)使用深度CNN和批量归一化进行图像去噪...

    最近哈工大的研究团队于2020年在国际著名的人工智能杂志 神经网络 上发表了 利用深度CNN进行批量重正化的图像去噪 作者信息 在论文中 作者提出了一种新的图像去噪网络 称为批重归一化去噪网络 BRDNet 可以解决硬件资源受限条件处理数据
  • 开发板的上电锁存

    1 开发板的软启动 开发板的电源开关用两种 1 拨码开关 打到一侧则接通 打到另一侧则关闭 开发板只有关闭和运行两种状态 电路设计简单 但是不能实现休眠模式 低功耗模式 2 按键 按下时通电 弹起时断电 但是我们可以给供电电路增加置锁电路
  • windbg双机调试的连接设置和常见问题(真机和VMware虚拟机间的连接)

    一些废话 在做内核开发的时候 windbg给我们提供了方便 但是windbg要求内核调试是双机调试 所以我们首先面对的是调试机和被调试机的连接问题 相信大部分开发人员都是用实体机开发好代码 放到虚拟机中运行 并在实体机中运行windbg对虚
  • linux网络编程(五)epoll进阶

    文章目录 1 事件模型 1 1 ET模式 1 2 LT模式 1 3 比较 2 实例一 3 实例二 4 实例三 1 事件模型 EPOLL事件有两种模型 Edge Triggered ET 边缘触发只有数据到来才触发 不管缓存区中是否还有数据
  • ESP8266云端数据加密保护

    启用mosquitto上加密 要在mosquitto上启用加密 您首先需要拥有证书 您可以从发行证书的公司购买它们 也可以将它们自己生成为自签名证书 安装OpenSSL包 首先 确认您已安装openssl软件包 并且它具有较新的版本 1 0
  • MySQL中数据库重命名

    今天同事让帮忙把线上的数据库重命名 恩 数据库重命名 这种需求的概率小之又小 今天居然还真给碰到了 表重名的话是rename table old table to new table So 库的重命名最简单快捷的办法是 rename old
  • yolov7裁剪出识别结果

    开头先附上两篇有关yolov7的使用教程 yolov7保姆级教程 链接 yolov7数据增强与数据划分 链接 本篇主要内容为 在识别出来目标照片后 对目标进行裁剪 1 准备照片与标签 标签的生成在执行代码中加入 save txt 完整命令如