从 numpy 数组制作顺序行(cv2)

Making sequential line(cv2) from numpy array

我有一个 numpy 数组,它包含来自图像 (newimg) 的 n(x 和 y)坐标(我将此 nparray 声明为 'line')。以5个坐标为例

[[ 33 101]
 [170  95]
 [151 190]
 [125 223]
 [115 207]]

然后我想在该坐标之间制作一条连续线(点 1 到点 2,点 2 到点 3,....,点 n-1 到点 n 和点 n 到点 1)

我正在尝试用 cv2.line 制作这样的算法

for a in range(5) :
   cv2.line(newimg, line[a:], line[a+1:], (255,255,255), 1)
cv2.line(newimg, line, line[1], (255,255,255), 1)

它会产生 SystemError: new style getargs format but argument is not a tuple

有什么想法吗?

解决,我将代码编辑为

for a in range(4) :
    cv2.line(newimg, tuple(line[a]), tuple(line[a+1]), (255,255,255), 1)
cv2.line(newimg, tuple(line[4], tuple(line[0]), (255,255,255), 1)

和图像:

问题:

有一些变化需要解决:

  1. 要访问数组中的单个值,请使用 line[i]line[i:] returns 从索引 i 开始到结尾的点数组。
  2. cv2.line() 接受元组作为起点和终点。

代码:

# proposed line as an array
line = np.array([[ 33, 101], [170,  95], [151, 190], [125, 223], [115, 207]])

# blank image
newimg = np.zeros((300, 300, 3), np.uint8)

# iterate every point and connect a line between it and the next point
for a in range(len(line) - 1):
    newimg = cv2.line(newimg, tuple(line[a]), tuple(line[a+1]), (255,255,255), 2)
newimg = cv2.line(newimg, tuple(line[0]), tuple(line[-1]), (255,255,255), 2)

输出:

编辑

更新了代码以连接 line

中第一个点和最后一个点之间的线