繁体   English   中英

我们如何通过xml得到形状的坐标?

[英]How do we get the coordinates of the shape through xml?

读取鼠标坐标值成功。 但是我需要通过xml读取存储的坐标值。

使用 ElementTree 检索值。 但是一旦你把它放在一个数组中,坐标的形状就是 x,y,所以中间的逗号会阻止 integer 转换。 而且它是一个字符串,所以两端都是撇号,所以不能转换。 请给我提意见。

<?xml version='1.0' encoding='utf-8'?>
<DA>
    <DetectionAreas>2</DetectionAreas>
    <DetectArea>
        <Point>0,0</Point>
        <Point>1280,0</Point>
        <Point>1280,720</Point>
        <Point>0,720</Point>
    </DetectArea>
    <Loitering>
        <Point>625,564</Point>
        <Point>625,0</Point>
        <Point>1280,0</Point>
        <Point>1280,631</Point>
    </Loitering>
</DA>

import xml.etree.ElementTree as ET

tree = ET.parse('./MapFile/C001101.map')
root = tree.getroot()
DetectPoint = root.getchildren()[1]
LoiteringPoint = root.getchildren()[2] 
IntrusionPoint = root.getchildren()[2]
Ipointvalue = []
Lpointvalue = []
Dpointvalue = []


if DetectPoint.tag == 'DetectArea' :
    for DPoint in root.findall("DetectArea/Point") :
        Dpointvalue.append(DPoint.text)
if LoiteringPoint.tag == 'Loitering' :
    for LPoint in root.findall("Loitering/Point") :        
        Lpointvalue.append(LPoint.text)
elif IntrusionPoint.tag == 'Intrusion' :
    for IPoint in root.findall("Intrusion/Point") :
        Ipointvalue.append(IPoint.text) 

ip = len(Ipointvalue)
lp = len(Lpointvalue)
dp = len(Dpointvalue)

for i in range(dp): 
    Dpointvalue[i]
    print(Dpointvalue[i])
for i in range(lp):
    Lpointvalue[i]
    print(Lpointvalue[i])
for i in range(ip):
    Ipointvalue[i]
    print(Ipointvalue[i])   

'
'
'
    def onMouseCallback(self, event, x, y, flags, idx):
        if self.view_state == 'intrusion append' or self.view_state == 'loitering append' or self.view_state == 'counting append':
            if event == cv2.EVENT_LBUTTONUP and flags == cv2.EVENT_FLAG_LBUTTON:
                works[idx].area_tmp.append([x, y])
                #print(works[idx].area_tmp)
                #print(Dpointvalue)

创建折线 我想要的坐标值是 x 和 y,但我想征求意见,因为它被识别为这样的 'x,y'。

定义一个名为 Point 的“namedtuple”。 这个 object 有两个 int 属性 x 和 y。 有一个辅助方法可以帮助您将您拥有的数据(x 和 y 作为字符串)转换为点 object

见下文

from collections import namedtuple

Point = namedtuple('Point','x y')

def make_point(point_str):
    parts = point_str.split(',')
    return Point(int(parts[0]),int(parts[1]))


point_str = '3,4'
point = make_point(point_str)
print(point)
print(point.x)
print(point.y)

output

Point(x=3, y=4)
3
4

现在您的代码可能如下所示:

...
Lpointvalue.append(make_point(LPoint.text))
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM