我需要将一个圆的数组(作为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]]
作为一个替代方法,在你用以下方法排序后,你可以用 [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:
...