目标检测画框显示中文标签

好久之前写的代码,最近又翻出来用了。。。找代码找了半天

该方法是PLT画图,画图比较麻烦,而且figsize恶心我半天

import xml.etree.ElementTree as ET
import os
import matplotlib
import cv2

matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib
from PIL import Image

classes = {
    'qicheqizhongji': '汽车起重机',
    'tadiao': '塔吊',
    'tuituji': '推土机'
}


def DrawBox(filename, image_id):
    im = cv2.imread(os.path.join(filename))
    im = im[:, :, (2, 1, 0)]
    fig, ax = plt.subplots(figsize=(10, 10))
    ax.imshow(im, aspect='equal')
    zhfont = matplotlib.font_manager.FontProperties(fname="/usr/share/fonts/truetype/arphic/ukai.ttc")
    tree = ET.parse('C:\\Users\\Ilearn\\Desktop\\wurenji\\' + image_id + '.xml')
    objs = tree.findall('object')
    for obj in objs:
        xmin = int(obj.find('bndbox').find('xmin').text)
        ymin = int(obj.find('bndbox').find('ymin').text)
        xmax = int(obj.find('bndbox').find('xmax').text)
        ymax = int(obj.find('bndbox').find('ymax').text)
        name = obj.find('name').text
        ax.add_patch(
            plt.Rectangle((xmin, ymin),
                          xmax - xmin,
                          ymax - ymin, fill=False,
                          edgecolor='red', linewidth=2)
        )
        ax.text(xmin, ymin - 9, classes[name], fontsize=50, color="white", style="italic", weight="light",
                verticalalignment='center',
                bbox=dict(facecolor='red', alpha=0.6),
                fontproperties=zhfont)
    plt.axis('off')
    plt.tight_layout()
    plt.draw()
    plt.savefig('C:\\Users\\Ilearn\\Desktop\\wurenji\\output\\' + image_id + '_output.jpg')


if __name__ == '__main__':
    for img in os.listdir('C:\\Users\\Ilearn\\Desktop\\wurenji\\'):
        if img.endswith('jpg'):
            print(img)
            DrawBox('C:\\Users\\Ilearn\\Desktop\\wurenji\\' + img, img[0:-4])

也想用cv2绘制图,现在还是感觉cv2香!!!!

# coding=utf-8
# cv2解决绘制中文乱码
 
import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont

 
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "font/simsun.ttc", textSize, encoding="utf-8")
    # 绘制文本
    draw.text((left, top), text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)


if __name__ == '__main__':
    img = cv2ImgAddText(cv2.imread('img1.jpg'), "大家好,我是片天边的云彩", 10, 65, (0, 0 , 139), 20)
    cv2.imshow('show', img)
    if cv2.waitKey(100000) & 0xFF == ord('q'):
        cv2.destroyAllWindows()   

猜你喜欢

转载自blog.csdn.net/qq_33193309/article/details/109081932