我正在修改python代码,以查看pygame表面上的车道检测图像。它工作正常,但偶尔我会看到来自以下功能的错误消息(我在调试中添加了两个打印件)。
def display_lines(image, lines):
line_image = np.zeros_like(image)
if lines is not None:
print('len of lines:',len(lines))
print(lines)
for line in lines:
x1, y1, x2, y2 = line
cv2.line(line_image, (x1,y1), (x2,y2), (255,0,0), 4)
return line_image
正常时,打印如下:
len of lines: 2
[[ 251 720 998 0]
[1026 720 281 0]]
出现错误时,错误消息如下:
len of lines: 2
[]
Traceback (most recent call last):
File "./automatic_control.py", line 758, in <lambda>
self.sensor.listen(lambda image: CameraManager._parse_image(weak_self, image))
File "./automatic_control.py", line 803, in _parse_image
line_image = display_lines(lane_image, averaged_lines)
File "./automatic_control.py", line 700, in display_lines
x1, y1, x2, y2 = line
ValueError: need more than 0 values to unpack
在错误情况下,print(lines)
仅打印[]
,但是为什么却为2
打印print(len(lines))
?可能是什么问题?
答案 0 :(得分:2)
lines
不是列表。 lines
是一个NumPy数组。这些是您真正需要完全不同的类型,以了解您要使用NumPy的区别。
在使您感到困惑的情况下,lines
是一个2x0数组。 NumPy数组的len
是其第一维的长度,因此lines
的长度为2,但仍包含0个元素。
我希望这样的数组打印为
[[]
[]]
但显然它打印为[]
。
要获得更多信息,您应该打印数组的repr
,它会显示类似的内容
array([], shape=(2, 0), dtype=something)