好久之前写的代码,最近又翻出来用了。。。找代码找了半天
该方法是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()