1.初始数据介绍
对于此博客:
图片路径为:datasets/images/Abyssinian_1.jpg
图片标准信息路径为:datasets/annotations/xmls/Abyssinian_1.xml
图片输出如下:
图片标注信息内容如下:
OXIIIT
Abyssinian_1.jpg
OXFORD-IIIT Pet Dataset
OXIIIT
flickr
600
400
3
0
cat
Frontal
0
0
333
72
425
158
0
2.图片文件的读取与解析
本次使用tensorflow2.4.0版本的内置函数对于该图片进行读取以及解码的操作,具体代码如下:
import tensorflow as tf
image = tf.io.read_file('datasets/images/Abyssinian_1.jpg') # 从文件路径中读取图片的内容
image = tf.image.decode_jpeg(image) # 由于图片是jpg格式的,对其进行解码操作
3.图片标注信息的读取与解析
对于图片标注信息中,我们需要关注的是bndbox中的内容,里面对应的是标注目标框的左下角(xmin,ymin)与右上角(xmax,ymax)的两个坐标。解析这两个左边的代码如下:
from lxml import etree
xml = open('datasets/annotations/xmls/Abyssinian_1.xml').read()
sel = etree.HTML(xml)
width = int(sel.xpath('//size/width/text()')[0])
height = int(sel.xpath('//size/height/text()')[0])
x_min = int(sel.xpath('//bndbox/xmin/text()')[0])
x_max = int(sel.xpath('//bndbox/xmax/text()')[0])
y_min = int(sel.xpath('//bndbox/ymin/text()')[0])
y_max = int(sel.xpath('//bndbox/ymax/text()')[0])
4.在图片上绘制对应的标注信息
对应绘制标注信息代码如下:
from matplotlib import pyplot as plt
from matplotlib.patches import Rectangle
plt.imshow(image)
rect = Rectangle(xy=(x_min, y_min), width=(x_max - x_min), height=(y_max - y_min), fill=False, color='red')
ax = plt.gca()
ax.axes.add_patch(rect)
plt.show()
其中对于Rectangle()函数的参数解释如下:
xy= 由于我们绘制的是一个矩形,这里对应的是图片中矩形的左下角点的坐标值
width= 这个属性代表我们想要绘制矩形的宽度,我们运用x_max-x_min间接求得
height= 这个属性代表我们想要绘制矩形的高度,我们运用y_max-y_min间接求得
fill= 这个属性代表矩形是否进行内部填充,因为我们只想绘制一个矩形的框,而不是内部被填充的矩形,所以我们把他置为False
color= 这个属性代表我们绘制矩形的颜色,这里我们选择绘制一个红色的矩形
5.结果展示
Original: https://blog.csdn.net/qq_44961869/article/details/116375721
Author: 水哥很水
Title: 深度学习——输出图片及其目标框
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/767934/
转载文章受原作者版权保护。转载请注明原作者出处!