问题是每条线由两个点定义。
从您的打印中,您可以看到数据排列。
例子:
a = [[[1150 327]
[1166 316]]
[[1146 475]
[1158 467]]]
上面的数据排列是:两个数组,包含两个数组,包含两个数值。
层次结构是由数组数组构建的数组(或由列表列表构建的列表)。
非常混乱的结构...
如您所见,有两个“组”的层次结构:
a[0]
等于[[1150 327] [1166 316]]
a[1]
等于[[1146 475] [1158 467]]
分成子组:
a[0]
等于[[1150 327] [1166 316]]
a[0][0]
等于[1150 327]
a[0][1]
等于[1166 316]
a[1]
等于[[1146 475] [1158 467]]
a[1][0]
等于[1150 327]
a[1][1]
等于[1158 467]
获取数值:a[0][0][0]
等于1150
。
x1, y1, x2, y2=line[0]
给你一个错误,因为line[0]
它是由两个数组/列表构建的:
你试图得到 4 个值,白色只有 2 个,所以你得到一个错误。
示例:
line[0]
等于[[1150 327] [1166 316]]
您可以将 is 视为两点p0
和p1
,并使用以下语法:
p0, p1 = line[0]
Python 允许使用“奇怪”的语法——获取两个元组中的值:
(x1, y1), (x2, y2) = line[0]
这是一个示例代码示例,它迭代 NumPy 线条数组并绘制线条:
import cv2
import numpy as np
# Array of lines:
lines = np.array([[[1150, 327], [1166, 316]],
[[1146, 475], [1158, 467]],
[[ 903, 322], [ 911, 320]],
[[ 364, 403], [ 374, 402]],
[[ 644, 570], [ 649, 569]],
[[ 249, 645], [ 255, 644]]])
# Create black image (resolution 1200x1000)
image = np.zeros((1200, 1000, 3), np.uint8)
# Iterate lines:
for line in lines:
(x1, y1), (x2, y2) = line
cv2.line(image, (x1,y1), (x2,y2), (255,0,0), 2)
cv2.imshow("Image", image)
cv2.waitKey(0)
注意:
我从您的帖子中获取了“点输出”,并构建了一个 NumPy 数组。
可能是在您的情况下,您必须进行迭代lines[0]
(很难从您的帖子中看出)。