OpenCV:排序圆数组

OpenCV: Sorting array of circles

我需要按从上到下和从左到右的顺序对圆数组(作为 HoughCircles 函数的结果)进行排序,但我做不到。

我使用了python内置的sorted方法如下:

circles = np.round(circles[0, :]).astype("int")
circles = sorted(circles, key=lambda v: [v[0], v[1]])

我得到以下结果:image

例如,在此示例图像中,它从圆圈 61 跳到 64,从 96 跳到 100,依此类推。

它把一些圆排序错了,好像是因为有些圆一两个像素错位了,造成这些错误。

编辑:

这些是我的原始数据和示例图像:

sample image

raw data of circles [[y, x, radius]]

sorting snippet

作为替代方案,在使用 [v[0],v[1]] 排序后,您对原始列表的一部分进行新排序,行数作为块大小。此解决方案的缺点是您将受制于答案的行数 sheet.

    ...
    circles = np.round(circles[0,:]).astype("int")
    circles = sorted(circles, key=lambda v: [v[0], v[1]])

    NUM_ROWS = 30

    sorted_cols = []
    for k in range(0, len(circles), NUM_ROWS):
        col = circles[k:k+NUM_ROWS]
        sorted_cols.extend(sorted(col, key=lambda v: v[1]))

    circles = sorted_cols

    img_colored = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

    if circles is not None:
    ...