完美解决labelimg xml转可视化中文乱码问题,不用matplotlib

本文讲述了作者在将一批标注项目转为可视化的过程中遇到的问题,起初使用错误的代码导致中文标签显示混乱。通过探索,作者发现使用PIL和cv2结合matplotlib设置中文字体,成功解决了这个问题,并分享了解决方案的代码。

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

背景简述

我们有一批标注项目要转可视化,因为之前没有做过,然后网上随意找了一段代码测试完美(并没有)搞定,开始疯狂标注,当真正要转的时候傻眼了,因为测试的时候用的是英文标签,实际标注的是中文标签,结果都是一大堆??????,在这里插入图片描述
结果瞬间让我满脑袋??????,赶紧找资料解决,各种方法试了个遍,网上大多数都是用cv2+matplotlib实现的计算和渲染,所以解决的主要思想就是集中在各种显示的设置matplotlib字体,然并卵;最后找到一种另辟蹊径的办法使用PIL+cv2实现,最后完美解决,在这里插入图片描述
贴上解决代码:

import cv2
import os
import numpy as np  
from PIL import Image, ImageDraw, ImageFont
import xml.etree.ElementTree as ET

data_path = 'E:\\test\\tianjingulou'
imgs_path = os.path.join(data_path, "img")
anns_path = os.path.join(data_path, "xml")
result_path = os.path.join(data_path)

img_names = set([os.path.splitext(i)[0] for i in os.listdir(imgs_path)])
ann_names = set([os.path.splitext(i)[0] for i in os.listdir(anns_path)])
img_names = list(img_names)
ann_names = list(ann_names)

for i in range(len(img_names)):
    img_path = os.path.join(imgs_path, img_names[i] + ".jpg")
    img_bgr = cv2.imread(img_path)

    xml_path = os.path.join(anns_path, ann_names[i] + ".xml")

    xml_inf = open(xml_path, encoding='utf-8')
    tree = ET.parse(xml_inf)
    root = tree.getroot()

    bbox_color = (0, 129, 255)
    bbox_thickness = 2
    # 把rgb转成16进制'#0081FF'
    bbox_color_str = "#{:02x}{:02x}{:02x}".format(*bbox_color)

    # 把rgb转成bgr再转16进制'#FF8100'
    # bbox_color_rgb = bbox_color[::-1]
    # bbox_color_str = "#{:02x}{:02x}{:02x}".format(*bbox_color_rgb)

    bbox_labelstr = {
   
        'font_size': 16,
        'font_thickness': 2,
        'offset_x': 0,
        'offset_y': -20,
    }

    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值