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]]
作为替代方案,在使用 [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:
...
我需要按从上到下和从左到右的顺序对圆数组(作为 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]]
作为替代方案,在使用 [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:
...