A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天想输出一下图片的标注信息,box和label注!opencv的路径下不能有中文!!! 读取图片时,返回的是None!!






  • import os



  • import cv2



  • import numpy as np



  • import  xml.dom.minidom



  • import pandas as pd



  • from PIL import Image, ImageDraw, ImageFont











  • input_file="F:/dataset/label/"  



  • dirs_name=os.listdir("F:/wrong/")  #图片地址







  • font=cv2.FONT_HERSHEY_SIMPLEX



  • for img in dirs_name:







  •     im=cv2.imread("F:/wrong/"+img)  #读取图片



  •     dom=xml.dom.minidom.parse(input_file+img[:-4]+".xml") # 读取图片对应的label信息 xml文件



  •     root=dom.documentElement







  •     objs=root.getElementsByTagName("object")







  •     name=[]



  •     xmin=[]



  •     ymin=[]



  •     xmax=[]



  •     ymax=[]







  •     for obj in objs:







  •         name1=obj.getElementsByTagName('name')



  •         n=name1[0].firstChild.data



  •         xmin1=obj.getElementsByTagName('xmin')



  •         xi=xmin1[0].firstChild.data



  •         ymin1=obj.getElementsByTagName('ymin')



  •         yi=ymin1[0].firstChild.data



  •         xmax1=obj.getElementsByTagName('xmax')



  •         xa=xmax1[0].firstChild.data



  •         ymax1=obj.getElementsByTagName('ymax')



  •         ya=ymax1[0].firstChild.data







  •         xmin.append(int(xi.strip()))



  •         print(xmin)



  •         ymin.append(int(yi.strip()))



  •         xmax.append(int(xa.strip()))



  •         ymax.append(int(ya.strip()))



  •         name.append(n.strip())







  •     for i in range(0,len(xmin)):











  •         #画box



  •         cv2.rectangle(im, (xmin,ymin), (xmax,ymax), (0,255,0), 4)







  •     cv2img = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)



  •     pilimg = Image.fromarray(cv2img)



  •     draw = ImageDraw.Draw(pilimg)



  •     # 写标注



  •     for i in range(0,len(xmin)):



  •         font = ImageFont.truetype("simhei.ttf", 40, encoding="utf-8")



  •         draw.text((xmin, ymin-40), name, (255, 0, 0), font=font)







  •     cv2charimg = cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR)







  •     #保存图片



  •     cv2.imwrite("F:/show/"+img,cv2charimg)


由于opencv想要在图片中添加中文文字需要下载专门的中文字体包,为了避免麻烦,使用PIL添加中文字,就需要多添加几个步骤。

opencv打开图片的格式是BGR,而PIL是RGB,首先需要转换,



  • cv2img = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)



  • pilimg = Image.fromarray(cv2img)


然后使用PIL中的ImageDraw写中文文字



  • draw = ImageDraw.Draw(pilimg)



  • font = ImageFont.truetype("simhei.ttf", 40, encoding="utf-8")#格式,参数分别为 字体文件,文字大小,编码方式



  • draw.text((xmin, ymin-40), name, (255, 0, 0), font=font)#写文字,参数为文字添加位置,添加的文字



4 个回复

正序浏览
回复 使用道具 举报
优秀,奈斯
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马