从opencv的houghcircles中,我得到了一个数组。这是一个只有一列的2d数组,除了我返回的是ndarray。我是新手,正在学习openCV。返回的数组显示异常,我想按第一列对其进行排序,然后将其秘密转换为常规2d数组。
Array-不是所有的数组,因为它有57行,但是这应该足够了。到处都没有逗号。
Circles =
[[ 876 566 6]
[ 898 574 6]
[ 846 710 6]
[ 850 762 7]
[ 822 574 6]
[ 880 620 6]
[ 894 650 6]
[ 836 604 6]]
我尝试过使用数组的sorted方法和ndarray.sort方法。
sorted(circles, key=lambda circles_entry: circles_entry[1])
circles[0].sort(axis=0)
我已经使用了这两种方法进行排序。第一个返回一个数组,其中包含数组。 3D阵列?第二个从各个位置对其进行排序。
第一类示例-
[array([[ 876, 566, 6],
[ 898, 574, 6],
[ 846, 710, 6],
[ 850, 762, 7],])]
第二种示例-
[[ 110 542 2]
[ 332 550 5]
[ 386 558 5]
[ 734 566 5]
[ 744 566 5]
[ 754 574 5]
[ 758 574 5]
[ 762 582 5]
[ 768 582 5]
[ 772 588 5]
[ 778 590 5]]
答案 0 :(得分:0)
您的circles
是一个二维numpy数组。没有逗号的显示是这种数组的常规str
格式:
In [13]: print(circles)
[[876 566 6]
[898 574 6]
[846 710 6]
[850 762 7]
[822 574 6]
[880 620 6]
[894 650 6]
[836 604 6]]
In [14]: circles.shape
Out[14]: (8, 3)
In [15]: type(circles)
Out[15]: numpy.ndarray
In [16]: print(repr(circles))
array([[876, 566, 6],
[898, 574, 6],
[846, 710, 6],
[850, 762, 7],
[822, 574, 6],
[880, 620, 6],
[894, 650, 6],
[836, 604, 6]])
我怀疑“常规2d数组”是指列表列表。至少这是Python中唯一的标准数组(除非您导入很少使用的array
模块):
In [18]: print(circles.tolist())
[[876, 566, 6], [898, 574, 6], [846, 710, 6], [850, 762, 7], [822, 574, 6], [880, 620, 6], [894, 650, 6], [836, 604, 6]]
在第一列上进行排序的一种方法是给我们np.argsort
获取索引:
In [25]: idx = np.argsort(circles[:,0])
In [26]: idx
Out[26]: array([4, 7, 2, 3, 0, 5, 6, 1])
In [27]: sc = circles[idx,:]
In [28]: sc
Out[28]:
array([[822, 574, 6],
[836, 604, 6],
[846, 710, 6],
[850, 762, 7],
[876, 566, 6],
[880, 620, 6],
[894, 650, 6],
[898, 574, 6]])
使用Python sorted
:
In [31]: sorted(circles, key=lambda x: x[0])
Out[31]:
[array([822, 574, 6]),
array([836, 604, 6]),
array([846, 710, 6]),
array([850, 762, 7]),
array([876, 566, 6]),
array([880, 620, 6]),
array([894, 650, 6]),
array([898, 574, 6])]
或者如果我们首先将circles
转换为嵌套列表:
In [32]: sorted(circles.tolist(), key=lambda x: x[0])
Out[32]:
[[822, 574, 6],
[836, 604, 6],
[846, 710, 6],
[850, 762, 7],
[876, 566, 6],
[880, 620, 6],
[894, 650, 6],
[898, 574, 6]]