OpenCV:对圆的数组进行排序

问题描述 投票:-1回答:1

我需要将一个圆的数组(作为HoughCircles函数的结果)按从上到下和从左到右排序,但我无法做到。

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

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

然后得到以下结果 图像

例如,在这个示例图像中,它从圆圈61跳到64,从96跳到100等等。

它错误地对一些圆圈进行了排序,似乎是因为一些圆圈错位了一两个像素,导致了这些错误。

EDIT:

这是我的原始数据和样图

样图

圆周数据 [[y, x, radius]]

分拣片段

python numpy opencv image-processing scikit-image
1个回答
0
投票

作为一个替代方法,在你用以下方法排序后,你可以用 [v[0],v[1]] 您可以在原始列表的一个片断上进行新的排序,并将行数作为块大小。这个解决方案的缺点是,你会被你的答题纸上的行数所束缚。

    ...
    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:
    ...

answer sheet comparison

© www.soinside.com 2019 - 2024. All rights reserved.