对文件夹中的png图像的目标分割结果中每个小目标分别直接添加最小矩形包围框,并将结果输出图像到另一个文件夹中 ,然后再生成一个xml格式目标类别为“1”标签集的文件夹
时间: 2024-05-03 10:22:35 浏览: 11
实现这个功能需要使用图像处理和文件操作的相关库,如OpenCV和xml.etree.ElementTree。以下是一个Python代码示例:
```python
import cv2
import os
import xml.etree.ElementTree as ET
input_folder = "./input_folder"
output_folder = "./output_folder"
xml_folder = "./xml_folder"
if not os.path.exists(output_folder):
os.makedirs(output_folder)
if not os.path.exists(xml_folder):
os.makedirs(xml_folder)
for filename in os.listdir(input_folder):
if filename.endswith(".png"):
# 读取原始图像和分割结果
input_path = os.path.join(input_folder, filename)
img = cv2.imread(input_path)
seg_path = os.path.join(input_folder, filename.replace(".png", "_seg.png"))
seg = cv2.imread(seg_path, cv2.IMREAD_GRAYSCALE)
# 提取每个小目标的最小矩形包围框
contours, _ = cv2.findContours(seg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, contour in enumerate(contours):
x, y, w, h = cv2.boundingRect(contour)
# 在原始图像上绘制包围框
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 保存输出图像到另一个文件夹
output_path = os.path.join(output_folder, f"{filename.replace('.png', '')}_{i}.png")
cv2.imwrite(output_path, img[y:y+h, x:x+w])
# 生成xml文件
xml_path = os.path.join(xml_folder, f"{filename.replace('.png', '')}_{i}.xml")
root = ET.Element("annotation")
folder = ET.SubElement(root, "folder")
folder.text = input_folder
filename_tag = ET.SubElement(root, "filename")
filename_tag.text = filename
size = ET.SubElement(root, "size")
ET.SubElement(size, "width").text = str(img.shape[1])
ET.SubElement(size, "height").text = str(img.shape[0])
ET.SubElement(size, "depth").text = str(img.shape[2])
obj = ET.SubElement(root, "object")
ET.SubElement(obj, "name").text = "1"
ET.SubElement(obj, "pose").text = "Unspecified"
ET.SubElement(obj, "truncated").text = "0"
ET.SubElement(obj, "difficult").text = "0"
bbox = ET.SubElement(obj, "bndbox")
ET.SubElement(bbox, "xmin").text = str(x)
ET.SubElement(bbox, "ymin").text = str(y)
ET.SubElement(bbox, "xmax").text = str(x+w)
ET.SubElement(bbox, "ymax").text = str(y+h)
tree = ET.ElementTree(root)
tree.write(xml_path)
```
这个代码首先定义了输入、输出和xml文件夹的路径。然后,遍历输入文件夹中的所有png图像,对于每个图像,读取原始图像和分割结果,提取每个小目标的最小矩形包围框,并在原始图像上绘制包围框。同时,将输出图像保存到输出文件夹,并生成一个xml文件,其中包含目标的类别、包围框和图像信息。最后,将xml文件保存到xml文件夹。