返回
Labelimg 已标注图片的Resize操作
人工智能
2023-09-23 10:01:49
在使用 Labelimg 等工具对图片进行标注后,我们有时需要调整图片大小。这一操作被称为图片缩放(Resize)。本文将简要介绍如何对已标注的 Labelimg 图片进行缩放。
理解Resize操作
Resize操作涉及调整图片的宽高。它可以通过两种方式完成:
- 比例缩放: 保持图片的宽高比,同时调整其整体大小。
- 非比例缩放: 自由调整图片的宽高,可能会导致图片失真。
使用Python和OpenCV缩放Labelimg图片
Labelimg使用XML文件存储标注信息。在缩放图片时,我们需要同时更新XML文件中与图像尺寸相关的标注。我们可以使用Python和OpenCV库来实现这一操作。
import cv2
import os
# 读取Labelimg XML文件
xml_path = 'path/to/image.xml'
tree = ET.parse(xml_path)
root = tree.getroot()
# 获取图片原始尺寸
width = int(root.find('size').find('width').text)
height = int(root.find('size').find('height').text)
# 缩放图片
new_width = 640
new_height = 480
image = cv2.imread('path/to/image.jpg')
resized_image = cv2.resize(image, (new_width, new_height))
# 更新XML文件中标注
for obj in root.findall('object'):
xmin = int(obj.find('bndbox').find('xmin').text)
xmax = int(obj.find('bndbox').find('xmax').text)
ymin = int(obj.find('bndbox').find('ymin').text)
ymax = int(obj.find('bndbox').find('ymax').text)
# 缩放标注
xmin_scaled = int(xmin * new_width / width)
xmax_scaled = int(xmax * new_width / width)
ymin_scaled = int(ymin * new_height / height)
ymax_scaled = int(ymax * new_height / height)
# 更新XML文件
obj.find('bndbox').find('xmin').text = str(xmin_scaled)
obj.find('bndbox').find('xmax').text = str(xmax_scaled)
obj.find('bndbox').find('ymin').text = str(ymin_scaled)
obj.find('bndbox').find('ymax').text = str(ymax_scaled)
# 保存更新后的XML文件
tree.write('path/to/updated.xml')
注意
缩放图像时,需要注意以下事项:
- 确保保留图像的宽高比,以避免图像失真。
- 更新 XML 文件中的标注以匹配缩放后的图像尺寸。
- 保存更新后的 XML 文件以保留标注信息。