La lectura de los valores de coordenadas del mouse fue exitosa. Pero necesito leer los valores de coordenadas almacenados a través del xml.

El valor se recuperó usando ElementTree. Pero una vez que lo ha puesto en una matriz, la forma de las coordenadas es x, y, por lo que la coma en el medio evita la conversión de enteros. Y es una cadena, por lo que es un apóstrofe en ambos extremos, por lo que no puede convertirlo. Por favor aconsejame.

<?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)

Para crear una polilínea Los valores de coordenadas que quería eran x e y, pero quiero pedir consejo porque se reconoció así 'x, y'.

0
KDH 1 oct. 2019 a las 11:53

1 respuesta

La mejor respuesta

Defina un 'nombre tupla' llamado Punto. Este objeto tiene dos propiedades int x e y. Existe un método auxiliar que lo ayudará a traducir los datos que tiene (x e y como cadena) a un objeto Point

Vea abajo

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)

Salida

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

Ahora su código puede verse así:

...
Lpointvalue.append(make_point(LPoint.text))
...
0
balderman 1 oct. 2019 a las 09:02