目标检测 - 如何在图片中标记Annotations中的坐标信息?
生活随笔
收集整理的这篇文章主要介绍了
目标检测 - 如何在图片中标记Annotations中的坐标信息?
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
先看我们代码的效果:
原始图片:
加载坐标信息后的图片:
我的文件结构是这样的:
这是我用于处理的代码:
import os import cv2 as cv import xml.etree.ElementTree as ETdef xml_to_jpg(imgs_path, xmls_path, out_path):imgs_list = os.listdir(imgs_path) #读取图片列表xmls_list = os.listdir(xmls_path) # 读取xml列表if len(imgs_list) <= len(xmls_list): #若图片个数小于或等于xml个数,从图片里面找与xml匹配的print("标记点1")for imgName in imgs_list:temp1 = imgName.split('.')[0] #图片名 例如123.jpg 分割之后 temp1 = 123temp1_ = imgName.split('.')[1] #图片后缀if temp1_!='jpg' and temp1_ !='jpeg':continuefor xmlName in xmls_list: #遍历xml列表temp2 = xmlName.split('.')[0] #xml名temp2_ = xmlName.split('.')[1]if temp2_ != 'xml':continueif temp2!=temp1: #判断图片名与xml名是否相同continueelse: #不同的话 开始读取xml坐标信息img_path = os.path.join(imgs_path, imgName)xml_path = os.path.join(xmls_path, xmlName)img = cv.imread(img_path)labelled = imgroot = ET.parse(xml_path).getroot()for obj in root.iter('object'):bbox = obj.find('bndbox')xmin = int(bbox.find('xmin').text.strip())ymin = int(bbox.find('ymin').text.strip())xmax = int(bbox.find('xmax').text.strip())ymax = int(bbox.find('ymax').text.strip())labelled = cv.rectangle(labelled, (xmin, ymin), (xmax, ymax), (0, 0, 255), 2)cv.imwrite(out_path + '\\' +imgName, labelled)breakelse: # 若xml个数小于图片个数,从xml里面找与图片匹配的。下面操作与上面差不多print("标记点2")for xmlName in xmls_list:temp1 = xmlName.split('.')[0]temp1_ = xmlName.split('.')[1]if temp1_ != 'xml':continuefor imgName in imgs_list:temp2 = imgName.split('.')[0]temp2_ = imgName.split('.')[1] # 图片后缀if temp2_ != 'png':continueif temp2 != temp1:continueelse:img_path = os.path.join(imgs_path, imgName)xml_path = os.path.join(xmls_path, xmlName)img = cv.imread(img_path)labelled = imgroot = ET.parse(xml_path).getroot()for obj in root.iter('object'):bbox = obj.find('bndbox')xmin = int(bbox.find('xmin').text.strip())ymin = int(bbox.find('ymin').text.strip())xmax = int(bbox.find('xmax').text.strip())ymax = int(bbox.find('ymax').text.strip())labelled = cv.rectangle(labelled, (xmin, ymin), (xmax, ymax), (0, 0, 255), 1)print(out_path + imgName)cv.imwrite(out_path + imgName, labelled)break if __name__ == '__main__':imgs_path = r'./A/' #图片路径xmls_path = r'./B_xml/' #xml路径retangele_img_path = './pic_out/' #保存画框的路径xml_to_jpg(imgs_path, xmls_path, retangele_img_path) 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的目标检测 - 如何在图片中标记Annotations中的坐标信息?的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 如何快将数据集划分为train、val(
- 下一篇: 使用 labelImg 制作YOLO系列