python实现xml标注文件生成mask

python实现xml标注文件生成mask

数据集:Medical Images for Nucleus Segmentation(TCGA,一个细胞核分割公共数据库,原图.tif,标注文件.xml)

xml文件结构:
若干个(X,Y)坐标点所围成的区域(region)表示一个细胞核的mask;若干个region组成的regions即这幅图所有细胞核的mask。

<Annotations MicronsPerPixel="0.252000">
	<Annotation ...>
		<Attributes>
			...
		</Attributes>
		<Regions>
			<RegionAttributeHeaders>
				...
			</RegionAttributeHeaders>
			<Region Id="2" Type="0" Zoom="5" Selected="0" ImageLocation="" ImageFocus="0" Length="126.0" Area="1049.3" LengthMicrons="31.8" AreaMicrons="66.6" Text="" NegativeROA="0" InputRegionId="0" Analyze="1" DisplayId="2">
				<Attributes/>
				<Vertices>
					<Vertex X="96.400000" Y="70.800000"/>
					<Vertex X="96.600000" Y="71"/>
					...
				</Vertices>
			</Region>
			<Region Id="3" ..>
				...
			</Region>
			...
		</Regions>
		<Plots/>
	</Annotation>
</Annotations>

代码:

# -*- coding: utf-8 -*-
import numpy as np
import cv2
import os
import xml.etree.ElementTree as ET

def xml2mask(filename, dir):

    mask = np.zeros([1000, 1000], dtype=np.uint8)
    
    xml = str(dir + "\\" + file)
    tree = ET.parse(xml)
    root = tree.getroot()
    regions = root.findall('Annotation/Regions/Region')
    for region in regions:
        points = []
        for point in region.findall('Vertices/Vertex'):
            x = float(point.attrib['X'])
            y = float(point.attrib['Y'])
            points.append([x, y])

        pts = np.asarray([points], dtype=np.int32)
        cv2.fillPoly(img=mask, pts=pts, color=255)
    cv2.imwrite("the\\dir\\you\\want\\to\\save\\to\\" + os.path.splitext(filename)[0] + ".png", mask)

dir = "the\\path\\to\\your\\xml\\files"
files = os.listdir(dir)
i = 0
for file in files:
    xml2mask(file, dir)
    i+=1
    print('已完成{0}幅图像!'.format(i))
print("全部完成!")

转换结果:
在这里插入图片描述

  • 14
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
要使用Python生成XML文件,可以使用xml.dom.minidom模块或xml.etree.ElementTree模块。 在xml.dom.minidom模块,可以使用Document类来创建XML文档对象,然后使用createElement()、appendChild()和createTextNode()等方法来创建元素和文本节点,并将它们添加到文档。最后,可以使用toprettyxml()方法将文档格式化为字符串或将其写入文件。以下是一个使用xml.dom.minidom模块创建XML文件的示例代码: ```python from xml.dom.minidom import Document doc = Document() root = doc.createElement("root") doc.appendChild(root) element = doc.createElement("element") text = doc.createTextNode("This is a test!") element.appendChild(text) root.appendChild(element) xml_str = doc.toprettyxml(indent=" ") with open("output.xml", "w") as f: f.write(xml_str) ``` 在xml.etree.ElementTree模块,可以使用ElementTree类来创建XML文档对象,然后使用Element()和SubElement()等方法来创建元素,并使用text属性设置元素的文本内容。最后,可以使用ElementTree的write()方法将文档写入文件。以下是一个使用xml.etree.ElementTree模块创建XML文件的示例代码: ```python import xml.etree.ElementTree as ET root = ET.Element("root") element = ET.SubElement(root, "element") element.text = "This is a test!" tree = ET.ElementTree(root) tree.write("output.xml") ``` 以上是两种常用的方法来生成XML文件的示例代码。你可以根据自己的需求选择其一种方法来使用。 #### 引用[.reference_title] - *1* [怎么用python创建文件-如何用Python创建生成xml文档文件的方法](https://blog.csdn.net/weixin_37988176/article/details/109417617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python学习(十四):Python如何创建一个xml文件](https://blog.csdn.net/weixin_43580890/article/details/129343510)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值