我需要在图像中绘制轮廓,因此我使用函数cv2.polylines
在点之间绘制线,但我不知道为什么会出现类似d
未定义的错误(d
是包含点集(x, y)
的列表)
import xml.dom.minidom
import cv2
import numpy as np
import matplotlib.pyplot as plt
def main(file):
doc = xml.dom.minidom.parse(file)
values = doc.getElementsByTagName("coordinateIndex")
coordX = doc.getElementsByTagName("x")
coordY = doc.getElementsByTagName("y")
d = {}
for atr_value, atr_x, atr_y in zip(values, coordX, coordY):
value = atr_value.getAttribute('value')
x = atr_x.getAttribute('value')
y = atr_y.getAttribute('value')
d[value] = [x, y]
return d
image = cv2.imread('1.631791322.58809740.14.834982.40440.3641459051.955.6373933.1920.jpeg')
point=d
cv2.polylines(image,
point,
isClosed = False,
color = (0,255,0),
thickness = 3,
linetype = cv2.LINE_AA)
imshow("image",image)
result = main('1.631791322.58809740.14.834982.40440.3641459051.955.6373933.1920.xml')
print(result)
这是一个示例XML文件:
<?xml version="1.0" ?>
<TwoDimensionSpatialCoordinate>
<coordinateIndex value="0"/>
<x value="302.6215607602997"/>
<y value="166.6285651861381"/>
<coordinateIndex value="1"/>
<x value="3.6215607602997"/>
<y value="1.6285651861381"/>
</TwoDimensionSpatialCoordinate>
这里有几个问题
首先,通过
d = {}
resp创建一个字典d
d[value] = [x, y]
,即d
不是一个列表其次,“
d
未定义”,因为d
是main
方法中的局部变量。调用result = main(...)
时result
将反映d
的值第三,
cv2.polylines
需要整数对的NumPy数组。您有浮点值,在XML中存储为字符串那么,现在让我们找到一种解决这些问题的方法:首先,我们将坐标转换为
float
(并重命名您的方法,因为main
对于这样的函数是一个错误的选择):然后,我们重新安排图像加载,并在脚本中提取坐标:
最后,我们将字典转换为一些NumPy数组,将浮点值转换为一些int类型,并正确调用
cv2.polylines
:我在示例XML中又添加了两个点,并使用了我的默认测试图像–这就是输出:
希望有帮助
相关问题 更多 >
编程相关推荐