对文件夹中的png图像的目标分割结果中所占像素为全图像素一半以下的每个目标分别直接添加最小矩形包围框,并将结果输出图像到另一个文件夹中 ,然后再生成一个xml格式目标类别为“1”标签集的文件夹
时间: 2024-05-11 17:14:03 浏览: 89
给定一个路径将其下面(含子文件夹)的所有png的文件复制到另外一个目录
实现该功能的Python代码如下:
```python
import os
from PIL import Image
import xml.etree.ElementTree as ET
# 定义输入和输出文件夹路径
input_dir = 'input_folder'
output_dir = 'output_folder'
# 定义最小像素数阈值
min_pixels = 0.5
# 遍历文件夹中的所有png图像
for filename in os.listdir(input_dir):
if filename.endswith('.png'):
# 读取图像并转换为灰度图像
im = Image.open(os.path.join(input_dir, filename)).convert('L')
# 获取图像宽度和高度
width, height = im.size
# 获取图像中每个像素的值
pixels = im.load()
# 定义目标像素数和目标计数器
target_pixels = width * height // 2
target_count = 0
# 遍历图像中每个像素
for y in range(height):
for x in range(width):
# 判断该像素是否为目标像素
if pixels[x, y] == 255:
target_count += 1
# 判断目标像素数是否小于阈值
if target_count < target_pixels * min_pixels:
# 如果是,则直接添加最小矩形包围框
bbox = (0, 0, width, height)
else:
# 否则进行目标分割并获取最小矩形包围框
# 这里省略目标分割的代码
bbox = (xmin, ymin, xmax, ymax)
# 保存带有包围框的图像到输出文件夹
im.save(os.path.join(output_dir, filename))
# 生成xml格式标注文件并保存到输出文件夹
root = ET.Element('annotation')
folder = ET.SubElement(root, 'folder')
folder.text = os.path.basename(output_dir)
filename_tag = ET.SubElement(root, 'filename')
filename_tag.text = filename
size = ET.SubElement(root, 'size')
width_tag = ET.SubElement(size, 'width')
width_tag.text = str(width)
height_tag = ET.SubElement(size, 'height')
height_tag.text = str(height)
depth_tag = ET.SubElement(size, 'depth')
depth_tag.text = '1'
object_tag = ET.SubElement(root, 'object')
name = ET.SubElement(object_tag, 'name')
name.text = '1'
bndbox = ET.SubElement(object_tag, 'bndbox')
xmin_tag = ET.SubElement(bndbox, 'xmin')
xmin_tag.text = str(bbox[0])
ymin_tag = ET.SubElement(bndbox, 'ymin')
ymin_tag.text = str(bbox[1])
xmax_tag = ET.SubElement(bndbox, 'xmax')
xmax_tag.text = str(bbox[2])
ymax_tag = ET.SubElement(bndbox, 'ymax')
ymax_tag.text = str(bbox[3])
tree = ET.ElementTree(root)
tree.write(os.path.join(output_dir, filename[:-4]+'.xml'), encoding='utf-8')
```
该代码会遍历输入文件夹中所有以“.png”结尾的图像文件,并进行目标分割。如果目标像素数占全图像素的一半以下,则直接添加最小矩形包围框;否则进行目标分割并获取最小矩形包围框。然后,将带有包围框的图像和相应的xml格式标注文件保存到输出文件夹中。标注文件中,目标类别为“1”。
阅读全文