用yolo数据集的txt格式来验证图片的标签类别

使用一张原始图片和yolo格式标注的txt文件,框出txt文件对应的标签和类别,并保存图片。

需要用到Python的OpenCV库来读取图片和绘制边界框,以及numpy来处理数据。

安装了所需的库:pip install opencv-python numpy

import cv2
import numpy as np

def draw_boxes_and_classes(image_path, annotation_path, classes_dict):
    # 读取图片
    image = cv2.imread(image_path)
    
    # 读取标注文件
    with open(annotation_path, 'r') as file:
        lines = file.readlines()

    # 遍历所有标注
    for line in lines:
        parts = line.strip().split()
        # YOLO格式: [class_id center_x center_y width height]
        class_id, x_center, y_center, width, height = map(float, parts)
        x_center, y_center, width, height = int(x_center * image.shape[1]), int(y_center * image.shape[0]), int(width * image.shape[1]), int(height * image.shape[0])
        
        # 计算边界框的左上角和右下角坐标
        x1 = int(x_center - width / 2)
        y1 = int(y_center - height / 2)
        x2 = x1 + width
        y2 = y1 + height

        # 绘制边界框
        cv2.rectangle(image, (x1, y1), (x2, y2), (255, 0, 0), 2)
        
        # 获取类别名称
        class_name = classes_dict.get(int(class_id), "Unknown")
        
        # 在边界框旁显示类别名称
        cv2.putText(image, class_name, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)

    # 保存图片
    cv2.imwrite('annotated_image.jpg', image)

# 假设你的图片路径和标注文件路径如下
image_path = 'path/to/your/image.jpg'
annotation_path = 'path/to/your/annotation.txt'

# 假设你有一个类别字典,其中类别索引映射到类别名称
classes_dict = {
    0: 'person',  # 以此类推
    1: 'bicycle',
    2: 'car',
    # ... 添加所有类别
}

# 调用函数
draw_boxes_and_classes(image_path, annotation_path, classes_dict)

函数定义:draw_boxes_and_classes函数接受三个参数:图片路径、标注文件路径和类别字典。

读取图片:使用cv2.imread读取原始图片。

读取标注文件:逐行读取标注文件,并解析每行的类别索引和边界框坐标。

绘制边界框:根据YOLO格式的坐标计算边界框的左上角和右下角坐标,并使用cv2.rectangle绘制边界框。

显示类别名称:在边界框旁边使用cv2.putText显示类别名称。

保存图片:使用cv2.imwrite保存绘制后的图片。

确保将image_path、annotation_path和classes_dict变量设置为实际的路径和类别字典。这个脚本将在当前脚本运行的目录下保存一个名为’annotated_image.jpg’的图片文件,其中包含绘制的边界框和类别标签。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值