Numpy - 插入数组

Numpy - insert into array

我创建了一个 AR aruco 标记程序。我的 table 每个角落都有四个标记。现在我想创建一个包含四个标记的矩形。我已经有了要连接它们的每个点的坐标。问题是当我使用 cv2.createpolyline 时,函数没有以正确的顺序连接它们。我现在想创建一个 numpy 数组,如果检测到标记,它会插入标记的坐标。当检测到所有四个 a 时,应该绘制多段线。到目前为止,这是我的代码:

if id == [0]:
    outline_poly = np.insert(outline_poly, 0, tl)
if id == [1]:
    outline_poly = np.insert(outline_poly, 1, tr)
if id == [2]:
    outline_poly = np.insert(outline_poly, 2, bl)
if id == [3]:
    outline_poly = np.insert(outline_poly, 3, br)

例如:如果检测到 ID = 0 的标记,则将左上角 (tl) 点的坐标插入到数组中。上面的代码是一个循环的一部分,它在每个循环中只检查一个 ID。因此,当检测到 ID0 时,该点的坐标在第一行中,第二行中的 ID1,第三行中的 id2,...

希望这是可以理解的。非常感谢。

当你说“以正确的顺序连接它们”时,你的意思是你希望生成的多段线是一个闭环吗?如果是这样,您需要确保数组中的第一个点和最后一个点相同。例如:

if id == [0]:
    outline_poly = np.insert(outline_poly, 0, tl)
if id == [1]:
    outline_poly = np.insert(outline_poly, 1, tr)
if id == [2]:
    outline_poly = np.insert(outline_poly, 2, bl)
if id == [3]:
    outline_poly = np.insert(outline_poly, 3, br)

确保第一个点和最后一个点相同

outline_poly = np.append(outline_poly, outline_poly[0])

或者,如果你只是想让折线是四个点之间的直线,你可以使用NumPy的vstack函数:

if id == [0]:
    outline_poly = np.vstack((outline_poly, tl))
if id == [1]:
    outline_poly = np.vstack((outline_poly, tr))
if id == [2]:
    outline_poly = np.vstack((outline_poly, bl))
if id == [3]:
    outline_poly = np.vstack((outline_poly, br))