返回

Labelimg 已标注图片的Resize操作

人工智能

在使用 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 文件以保留标注信息。