yoloV5 Ground Truth box框框的绘制

文章介绍了YoloLabel的标签格式,包括.txt文件的命名规则和存放路径。内容涉及图像处理,特别是使用OpenCV绘制边界框时的颜色顺序,颜色与训练时yaml文件中类别顺序的关系,以及BGR与RGB颜色格式的转换。代码示例展示了如何将标签应用到图像上,生成带有边界框的输出图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GT标签格式就是 yolo label的形式,也就是.txt格式,而且命名除了后缀与图片不同其他是一样的,具体的排放路径如下,其中LGT是主目录:
在这里插入图片描述
图片就全部放在images中,标签就全部放在labels中,最终的输出图片默认放在output中

有一点需要说明,就是框的颜色问题,根据yolov5的plots.py文件,颜色的顺序是这样的,具体可以查看源文件:

hex = ('FF3838', 'FF9D97', 'FF701F', 'FFB21D', 'CFD231', '48F90A', '92CC17', '3DDB86', '1A9334', '00D4BB',
               '2C99A8', '00C2FF', '344593', '6473FF', '0018EC', '8438FF', '520085', 'CB38FF', 'FF95C8', 'FF37C7')

这些颜色出现的顺序是与你训练时使用的yaml文件有关的,比如,如果yaml文件中标签的顺序是这样:

# Classes
nc: 4  # number of classes
names: ['D10', 'D00', 'D20', 'D40']  # class names

这就意味着D10标签的颜色是 FF3838,以此类推。这里颜色的表示是HEX格式,利用opencv画图传入的颜色格式是BGR!注意是BGR不是RGB!!!
几乎所有的颜色转换网站默认的颜色格式是rgb,需要自己换一下,切记!

# -- coding: utf-8 --
import os
import shutil
from pathlib import Path
import numpy as np
import cv2
from tqdm import tqdm

# 修改输入图片文件夹
img_folder = "LGT/images"
img_list = os.listdir(img_folder)
img_list.sort()
# 修改输入标签文件夹
label_folder = "LGT/labesl"
label_list = os.listdir(label_folder)
label_list.sort()
# 输出图片文件夹位置
output_folder = 'LGT/output'

labels = ['D10', 'D00', 'D20', 'D40']  # 这里修改为自己的类别

# 色盘,可根据类别添加新颜色,注意第一个别动,这是字体的颜色也就是白色,往后面推
colormap = [(255, 255, 255), (56, 56, 255), (151, 157, 255), (31, 112, 255), (29, 178, 255)]   # 不是RGB,是BGR


# 坐标转换
def xywh2xyxy(x, w1, h1, img):
    label, x, y, w, h = x

    label = int(label)
    label_ind = label

    # 边界框反归一化
    x_t = x * w1
    y_t = y * h1
    w_t = w * w1
    h_t = h * h1

    # 计算坐标
    top_left_x = x_t - w_t / 2
    top_left_y = y_t - h_t / 2
    bottom_right_x = x_t + w_t / 2
    bottom_right_y = y_t + h_t / 2

    p1, p2 = (int(top_left_x), int(top_left_y)), (int(bottom_right_x), int(bottom_right_y))
    # 绘制矩形框
    cv2.rectangle(img, p1, p2, colormap[label_ind+1], thickness=2, lineType=cv2.LINE_AA)
    label = labels[label_ind]
    if label:
        w, h = cv2.getTextSize(label, 0, fontScale=2 / 3, thickness=2)[0]  # text width, height
        outside = p1[1] - h - 3 >= 0  # label fits outside box
        p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3
        # 绘制矩形框填充
        cv2.rectangle(img, p1, p2, colormap[label_ind+1], -1, cv2.LINE_AA)
        # 绘制标签
        cv2.putText(img, label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), 0, 2 / 3, colormap[0],
                    thickness=2, lineType=cv2.LINE_AA)
    return img


if __name__ == '__main__':
    # 创建输出文件夹
    if Path(output_folder).exists():
        shutil.rmtree(output_folder)
    os.mkdir(output_folder)
    # labels和images可能存在不相等的情况,需要额外判断对应关系
    img_index = 0
    label_index = 0
    for _ in tqdm(range(len(label_list))):
        image_path = img_folder + "/" + img_list[img_index]
        label_path = label_folder + "/" + label_list[label_index]
        if img_list[img_index][:-4] != label_list[label_index][:-4]:
            img_index += 1
            continue
        # 读取图像文件
        img = cv2.imread(str(image_path))
        h, w = img.shape[:2]
        # 读取 labels
        with open(label_path, 'r') as f:
            lb = np.array([x.split() for x in f.read().strip().splitlines()], dtype=np.float32)
        # 绘制每一个目标
        for x in lb:
            # 反归一化并得到左上和右下坐标,画出矩形框
            img = xywh2xyxy(x, w, h, img)
        cv2.imwrite(output_folder + '/' + '{}.png'.format(image_path.split('/')[-1][:-4]), img)
        img_index += 1
        label_index += 1

参考博客:颜色格式转换网站代码主体来源

<think>好的,用户想了解VuePC框架的使用指南、官方文档和示例教程。首先,我需要确认VuePC是否是一个现有的框架,或者可能是用户拼写错误,比如Vue PC端框架。根据现有知识,Vue.js本身是一个前端框架,常用于构建用户界面,而针对PC端可能有特定的UI库,比如Element UI、Ant Design Vue等。 接下来,检查用户提供的引用内容。引用[1]提到Vue.js的入门指南,涵盖性能优化和最佳实践,引用[2]和[3]涉及Vue项目的初始化配置和入口文件设置。这些可能与用户的问题相关,特别是关于Vue项目的搭建和配置步骤。 用户可能将某个基于VuePC端UI框架简称为VuePC,比如Element UI或Ant Design Vue。需要指出正确的名称并提供相关文档链接。例如,Element UI的官方文档是https://element.eleme.io,Ant Design Vue的文档是https://www.antdv.com。 此外,用户可能需要示例教程,可以推荐官方提供的示例和教程,以及社区资源如掘金、优快云上的文章,或者GitHub上的项目模板。同时,建议用户按照引用[3]中的步骤初始化Vue项目,并集成所选的UI框架。 需要确保回答结构清晰,分步骤说明如何开始使用,包括安装、配置、使用组件等,并附上相关引用。同时,生成相关问题,帮助用户进一步了解框架选择、组件使用和优化方法。</think>### VuePC框架使用指南 VuePC通常指基于Vue.js构建的PC端企业级框架,推荐使用以下主流解决方案: --- #### 一、主流PCVue框架推荐 1. **Element Plus** - 官方文档:https://element-plus.org - 特点:包含80+高质量组件,支持暗黑主题 - 安装命令: ```bash npm install element-plus --save ``` 2. **Ant Design Vue** - 官方文档:https://www.antdv.com - 特点:企业级设计体系,提供Pro商业模板 - 组件示例: ```vue <template> <a-button type="primary">AntD按钮</a-button> </template> ``` 3. **Vuetify** - 官方文档:https://vuetifyjs.com - 特点:Material Design风格,支持SSR --- #### 二、项目初始化步骤 1. 创建Vue3项目(参考引用[3]): ```bash npm init vue@latest ``` 2. 集成Element Plus: ```typescript // main.ts import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' createApp(App) .use(ElementPlus) .mount('#app') ``` 配置过程详见引用[2]的入口文件说明 --- #### 三、最佳实践建议 1. 组件划分:按功能模块拆分组件(参考引用[1]的组件划分规范) 2. 性能优化: - 按需加载组件 - 使用`<script setup>`语法 - 路由懒加载配置 3. 代码规范: ```javascript // 采用驼峰命名 export default defineComponent({ components: { UserProfile } }) ``` --- #### 四、学习资源推荐 1. 官方教程: - Element Plus实战:https://element-plus.org/guide/quickstart.html 2. 示例项目: ```bash git clone https://github.com/element-plus/element-plus-examples ``` 3. 社区资源: - 掘金《Vue3企业级实战》专栏 - Vue Mastery进阶课程 --- #### 五、调试工具配置 1. 安装Vue Devtools: ```bash npm install -g @vue/devtools ``` 2. 浏览器插件: - Chrome商店搜索"Vue.js devtools" §§ 1. 如何选择VuePC端和移动端框架? 2. Element Plus表格组件如何进行大数据量优化? 3. Vue3组合式API与选项式API的主要区别是什么? 4. 如何实现Vue应用的国际化方案? [^1]: Vue性能优化建议 [^2]: 项目入口文件配置 [^3]: 项目初始化流程
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值