HoughCircles OpenCV return ndarray into array in python
HoughCircles OpenCV return ndarray into array in python
从 opencv 中的 houghcircles,我得到一个返回的数组。这是一个只有一列的二维数组,除了我返回的是一个 ndarray。我是新手,正在学习 openCV。返回的数组显示得很奇怪,我想按第一列对其进行排序并将其转换为常规的二维数组。
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]]
我试过对数组使用排序方法和 ndarray.sort 方法。
sorted(circles, key=lambda circles_entry: circles_entry[1])
circles[0].sort(axis=0)
我已经使用这两种方法尝试排序。第一个 returns 是一个数组,其中包含一个数组数组。三维阵列?第二个从所有位置排序。
第一类示例-
[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]]
您的 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]])
我怀疑 'regular 2d array' 你指的是列表列表。至少这是 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]]
从 opencv 中的 houghcircles,我得到一个返回的数组。这是一个只有一列的二维数组,除了我返回的是一个 ndarray。我是新手,正在学习 openCV。返回的数组显示得很奇怪,我想按第一列对其进行排序并将其转换为常规的二维数组。
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]]
我试过对数组使用排序方法和 ndarray.sort 方法。
sorted(circles, key=lambda circles_entry: circles_entry[1])
circles[0].sort(axis=0)
我已经使用这两种方法尝试排序。第一个 returns 是一个数组,其中包含一个数组数组。三维阵列?第二个从所有位置排序。
第一类示例-
[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]]
您的 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]])
我怀疑 'regular 2d array' 你指的是列表列表。至少这是 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]]