裁剪策略:

从左至右,从上至下滑动裁剪320x320大小的子图,滑动步长为160,当最右边超出边界,以边界为边,向左裁剪320;最下端超出边界部分也是这样处理。

xml文件格式是Pascal VOC格式。

代码如下:

import os
import xml.etree.ElementTree as ET
from PIL import Imagedef crop_one_image_and_xml(image_path, annotation_path, output_path, filename):# -*- coding: encoding -*-# 原图文件和标注文件的路径# image_path = 'path/to/original/image'# annotation_path = 'path/to/original/annotation'# 小块图片和标注文件保存的路径# output_path = 'path/to/output/folder'# 小块图片的尺寸和裁剪策略block_size = (320, 320)stride = (160, 160)# 解析原图的标注文件tree = ET.parse(annotation_path)root = tree.getroot()  # 获取ElementTree对象的根节点。根据XML文件的结构,每个XML文件都有一个根节点。getroot()方法返回这个根节点,并将其保存在变量root中。这个方法返回的是一个 Element 类型的对象,它代表了整个XML文件的根节点。# 获取原图的大小size = (int(root.find('size/width').text), int(root.find('size/height').text))  # 获取XML文件中 size/width 这个节点的值,并将其转换为整数类型。# 计算小块图片的行数和列数rows = (size[1] - block_size[1]) // stride[1] + 2cols = (size[0] - block_size[0]) // stride[0] + 2# 遍历每个小块图片的位置for row in range(rows):for col in range(cols):# 计算小块图片的左上角在原图中的位置坐标x0 = col * stride[0]y0 = row * stride[1]x1 = x0 + block_size[0]y1 = y0 + block_size[1]# 如果超出原图边界,则调整小块图片的大小和位置if x1 > size[0]:x1 = size[0]x0 = x1 - block_size[0]if y1 > size[1]:y1 = size[1]y0 = y1 - block_size[1]# 创建小块图片并保存block_image = Image.open(image_path).crop((x0, y0, x1, y1))block_filename = f'{filename}_{x0, y0}-{x1, y1}.tif'block_image.save(os.path.join(output_path, block_filename))# 检查是否含有标注框,True代表没有标注框,False就代表有标注框check_bndbox_is_none = True# 创建小块图片的标注文件并保存'''ET 是 ElementTree 库的别名或者是导入的模块,使用 ET.Element('annotation') 创建了一个名为 annotation 的元素,它代表了这个XML文档的根节点。Element() 方法会返回一个 Element 类型的对象,该对象代表了一个XML元素。这个XML文档的根节点是 annotation,它是这个XML文档的最上层元素,它可以包含其它元素或者属性,而其它元素或者属性都是它的子元素或者子属性。你可以通过在这个根元素上调用方法,如 .append() 或 .attrib,来添加子元素或者属性。'''block_root = ET.Element('annotation')folder_elem = ET.Element('folder')folder_elem.text = str('Images')block_root.append(folder_elem)filename_elem = ET.Element('filename')filename_elem.text = str(os.path.join(filename + ".tif"))block_root.append(filename_elem)path_elem = ET.Element('path')path_elem.text = str(os.path.join(annotation_path, filename + ".tif"))block_root.append(path_elem)source_elem = ET.Element('source')database_elem = ET.Element('database')database_elem.text = str('Unknown')source_elem.append(database_elem)block_root.append(source_elem)# 添加图像大小信息'''使用 ElementTree 库创建一个 XML 文档中的 size 元素,并在其中添加 width 和 height 子元素,然后将它们的文本内容设置为图像 block_image 的宽度和高度,最终生成以下 XML 结构:<size><width>图像宽度</width><height>图像高度</height></size>最后将size 元素 添加到根节点 block_root = ET.Element('annotation') 中'''size_elem = ET.Element('size')width_elem = ET.Element('width')width_elem.text = str(block_image.width)height_elem = ET.Element('height')height_elem.text = str(block_image.height)depth_elem = ET.Element('depth')depth_elem.text = str('1')size_elem.append(width_elem)size_elem.append(height_elem)size_elem.append(depth_elem)block_root.append(size_elem)segmented_elem = ET.Element('segmented')segmented_elem.text = str('0')block_root.append(segmented_elem)# 遍历原图的目标,并添加到小块图片的标注文件中'''使用了 ElementTree 库中的 findall() 方法和 find() 方法来查找 XML 元素中的特定子元素,并将其文本内容转换为 Python 中的数据类型。for obj in root.findall('object'): 找到该 XML 元素中所有名为 object 的子元素,并对每一个 object 子元素执行下面的代码。在循环内部,obj.find('name').text 获取了当前 object 子元素下的名为 name 的子元素,并返回该子元素的文本内容,这里是一个字符串类型,赋值给了 name 变量。'''for obj in root.findall('object'):  # root = ET.parse(annotation_path).getroot() 原xml文件的根节点name = obj.find('name').text  # 原图标注框的类别名pose = obj.find('pose').texttruncated = obj.find('truncated').textdifficult = obj.find('difficult').textxmin = int(obj.find('bndbox/xmin').text)  # 原图的标注框的左上点的坐标ymin = int(obj.find('bndbox/ymin').text)  # 原图的标注框的左上点的坐标xmax = int(obj.find('bndbox/xmax').text)  # 原图的标注框的右下点的坐标ymax = int(obj.find('bndbox/ymax').text)  # 原图的标注框的右下点的坐标# 将目标框的坐标转换为小块图片的相对坐标   x0y0小块图片的左上角右下角在原图中的位置坐标xmin -= x0ymin -= y0xmax -= x0ymax -= y0# 如果目标框在小块图片内,则添加到标注文件中if 0 < xmin < block_image.width and 0 < ymin < block_image.height and \0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and xmax > block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and 0 < xmax < block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin < 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and 0 < ymin < block_image.height and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and ymin < 0 and xmax > block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin < 0 and 0 < xmax < block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and 0 < ymin < block_image.height and xmax > block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and ymin < 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin < 0 and xmax > block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and 0 < ymin < block_image.height and 0 < xmax < block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and xmax > block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and 0 < ymin < block_image.height and xmax > block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and ymin < 0 and xmax > block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and ymin < 0 and 0 < xmax < block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin < 0 and xmax > block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin == 0 and ymin == 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin == 0 and 0 < ymin < block_image.height and 0 < xmax < block_image.width and ymax == block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and xmax == block_image.width and ymax == block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin == 0 and xmax == block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin == 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin == 0 and ymin == 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and 0 < xmax < block_image.width and ymax == block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and xmax == block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin < 0 and xmax == block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin == 0 and ymin < 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin == 0 and 0 < ymin < block_image.height and 0 < xmax < block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and xmax == block_image.width and ymax > block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin == 0 and ymin == 0 and xmax == block_image.width and ymax == block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and ymin == 0 and 0 < xmax < block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif xmin < 0 and 0 < ymin < block_image.height and 0 < xmax < block_image.width and ymax == block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(0)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(xmax)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and ymin == 0 and xmax > block_image.width and 0 < ymax < block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(0)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(ymax)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelif 0 < xmin < block_image.width and 0 < ymin < block_image.height and xmax > block_image.width and ymax == block_image.height:obj_elem = ET.Element('object')  # 创建 object 属性name_elem = ET.Element('name')  # 创建 name 属性name_elem.text = name  # name = obj.find('name').text  name的值没有改变pose_elem = ET.Element('pose')pose_elem.text = posetruncated_elem = ET.Element('truncated')truncated_elem.text = truncateddifficult_elem = ET.Element('difficult')difficult_elem.text = difficultobj_elem.append(name_elem)  # 将name加入到 object 节点obj_elem.append(pose_elem)obj_elem.append(truncated_elem)obj_elem.append(difficult_elem)bndbox_elem = ET.Element('bndbox')  # 创建 bndbox 属性xmin_elem = ET.Element('xmin')  # 创建 xmin 属性xmin_elem.text = str(xmin)ymin_elem = ET.Element('ymin')  # 创建 ymin 属性ymin_elem.text = str(ymin)xmax_elem = ET.Element('xmax')  # 创建 xmax 属性xmax_elem.text = str(block_image.width)ymax_elem = ET.Element('ymax')  # 创建 ymax 属性ymax_elem.text = str(block_image.height)bndbox_elem.append(xmin_elem)bndbox_elem.append(ymin_elem)bndbox_elem.append(xmax_elem)bndbox_elem.append(ymax_elem)obj_elem.append(bndbox_elem)block_root.append(obj_elem)check_bndbox_is_none = Falseelse:check_bndbox_is_none = True# 保存小块图片的标注文件xml_filename = f'{filename}_{x0, y0}-{x1, y1}.xml''''这段代码使用 Python 中的 ElementTree 模块创建了一个名为 "tree" 的 XML 文档对象,并将其初始化为 "block_root" 元素的根节点。具体来说,这里的 ET 是 ElementTree 模块的别名,block_root 是一个 Element 对象,表示 XML 文档中的根元素。ET.ElementTree(block_root) 将 Element 对象包装在 ElementTree 对象中,以便使用 ElementTree 模块提供的方法来处理 XML 文档。通过将根元素传递给 ElementTree 构造函数,我们可以创建一个表示整个 XML 文档的对象,可以用于遍历、修改或序列化 XML 数据。'''tree = ET.ElementTree(block_root)tree.write(os.path.join(output_path,xml_filename))  # 使用 ElementTree 模块的 write 方法将 XML 文档对象 tree 中的数据写入到指定路径下的一个 XML 文件中。# if not check_bndbox_is_none:#     # 保存小块图片的标注文件#     xml_filename = f'{filename}_{x0, y0}-{x1, y1}.xml'#     '''#     这段代码使用 Python 中的 ElementTree 模块创建了一个名为 "tree" 的 XML 文档对象,并将其初始化为 "block_root" 元素的根节点。#     具体来说,这里的 ET 是 ElementTree 模块的别名,block_root 是一个 Element 对象,表示 XML 文档中的根元素。#     ET.ElementTree(block_root) 将 Element 对象包装在 ElementTree 对象中,以便使用 ElementTree 模块提供的方法来处理 XML 文档。#     通过将根元素传递给 ElementTree 构造函数,我们可以创建一个表示整个 XML 文档的对象,可以用于遍历、修改或序列化 XML 数据。#     '''#     tree = ET.ElementTree(block_root)#     tree.write(os.path.join(output_path,#                             xml_filename))  # 使用 ElementTree 模块的 write 方法将 XML 文档对象 tree 中的数据写入到指定路径下的一个 XML 文件中。# else:#     # 先保存后删除#     xml_filename = f'{filename}_{x0, y0}-{x1, y1}.xml'#     tree = ET.ElementTree(#         block_root)  # 这段代码使用 Python 中的 ElementTree 模块创建了一个名为 "tree" 的 XML 文档对象,并将其初始化为 "block_root" 元素的根节点。具体来说,这里的 ET 是 ElementTree 模块的别名,block_root 是一个 Element 对象,表示 XML 文档中的根元素。ET.ElementTree(block_root) 将 Element 对象包装在 ElementTree 对象中,以便使用 ElementTree 模块提供的方法来处理 XML 文档。通过将根元素传递给 ElementTree 构造函数,我们可以创建一个表示整个 XML 文档的对象,可以用于遍历、修改或序列化 XML 数据。#     tree.write(os.path.join(output_path,#                             xml_filename))#     os.remove(os.path.join(output_path,xml_filename))# xml文件地址
xml_folder = r'A:\DataSet\02. my_dataset\123'
# xml对应的图片地址
image_folder = r'A:\DataSet\02. my_dataset\234'
# 切割后的图片以及对应的xml文件保存地址
output_path = r'A:\DataSet\02. my_dataset\456'
# 获取所有xml格式标注文件的文件名
xml_files = [f for f in os.listdir(xml_folder) if f.endswith('.xml')]for file in xml_files:annotation_path = os.path.join(xml_folder, file)filename = os.path.splitext(file)[0]image_path = os.path.join(image_folder, filename + ".tif")crop_one_image_and_xml(image_path, annotation_path, output_path, filename)print(f"{filename}切割完毕")print("全部切割完毕")

裁剪图片的同时将xml标注文件里的真实框裁剪,使得他们一一对应相关推荐

  1. 利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件

    转载自:利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件 - Why So Serious? - 博客频道 - CSDN.NET  http://blog.csd ...

  2. 后缀为labels的文件_txt标注文档转换为labelmg VOC格式的xml标注文件

    清理库存8~ #! /usr/bin/python # -*- coding:UTF-8 -*- import os, sys import glob from PIL import Image ## ...

  3. 怎么让图片居中php,怎么让CSS文件里图片居中

    让CSS文件里图片居中的方法:首先创建一个HTML示例文件:然后引入一张背景图片:最后通过css中的"background-position"属性实现图片居中即可. 本文操作环境: ...

  4. 根据LabelImg标注的方框大小批量裁剪图片

    根据LabelImg标注的方框大小批量裁剪图片 用LabelImg软件在windows下标注了图片了后,可以根据标注的大小进行图片的裁剪,下图是LabelImg软件图 代码 代码可实现对图片批量裁剪处 ...

  5. xml格式标注文件转csv格式

    将xml格式的标注文件转为csv格式 方便后续转为tfrecord格式供tensorflow使用 注意,该代码仅使用矩形框标注方法 import os import glob import panda ...

  6. 将Yolo格式标注文件转换为VOC格式

    这篇文章主要参考博客Yolo标准数据集格式转Voc数据集中的代码,对原博客代码进行一定修改.添加注释,此外还在后面添加了我自己写的一段关于对转换后的标注文件进行整理的脚本代码. Yolo标注的格式与V ...

  7. HTML5 本地裁剪图片

    最近有时间了解了下html5的各API,发现新浪微博的头像设置是使用canvas实现截图的,加之前段时间了解了下html5的File API使用File API 之FileReader实现文件上传更加 ...

  8. 怎么裁剪图片?图片裁剪这样办就可以

    怎么裁剪图片?裁剪图片的大小在我们的日常生活中十分常见,比如裁剪图片让其变得更美观.裁剪图片中多余的部分.证件照尺寸裁剪等等.相信很多小伙伴们手机上就可以进行图片的编辑裁剪,可以说裁剪图片还是十分方便 ...

  9. registerForActivityResult请求权限/拍照/选取视频图片/裁剪图片

    权限相关 //近似定位(模糊定位) Manifest.permission.ACCESS_COARSE_LOCATION //精确定位 Manifest.permission.ACCESS_FINE_ ...

最新文章

  1. 安装虚拟机及Linux常用操作命令
  2. 如何解决Windows Update错误80070003
  3. android.mk 优化编译,android下ndk编译c优化
  4. TCP三次握手的原理及***手段
  5. bwlabel算法_bwlabel函数的c++实现
  6. gitlable iphone_使用gitlab ci构建IOS包并发送通知消息到企业微信
  7. Android8.1 MTK平台 截屏功能分析
  8. CVPR 2019 | 微软亚洲研究院 7 篇精选论文解读
  9. 记录一次安恒信息面试过程
  10. JDK,JRE和JVM之间的区别
  11. 网络相关 doc 命令 netstat
  12. linux运行jar包依赖,linux怎么打jar包
  13. 小程序学习笔记(5)-目录结构介绍
  14. 网站服务器检测工具,服务器网络监测工具
  15. 大数据可视化 课堂笔记-1
  16. 用什么软件免费查重呢?4款比较靠谱的论文查重软件值得一试
  17. Python程序设计(第三版)约翰·策勒 编程练习课后答案(第二章)
  18. TreeGrid(树形表格)
  19. YOLOv5目标检测➕声音告警
  20. MIPS-单周期CPU设计

热门文章

  1. 摩托罗拉Razr3配置怎么样 摩托罗拉Razr3何时上市
  2. Nginx根目录重定向首页配置
  3. 启动tomcat时日志出现乱码
  4. wpf 自定义combox控件
  5. 论文学习笔记(1):Efficient L0 resampling of point sets
  6. 【scrapyd】部署
  7. 《思考,快与慢》-结合消费者市场的分析|倪钰桐谈商业
  8. 二进制反码求和及检验和(反码求和中“回卷”机制)
  9. 出色的开源中国象棋棋谱APP-Chess
  10. 微信小程序云数据库-删除指定数据