在python/numpy中,如何将包含条目[[[int]]…]的向量转换为包含条目[[int]…]的向量?
我有一个numpy向量中的数据,看起来像这样:在python/numpy中,如何将包含条目[[[int]]…]的向量转换为包含条目[[int]…]的向量?,python,opencv,numpy,Python,Opencv,Numpy,我有一个numpy向量中的数据,看起来像这样: [[[1119 15]] [[1125 27]] [[1129 43]] [[1131 62]] [[1131 87]] [[1141 234]] ...] 这些应该是一组我可以用来表示曲线的点,但是每个点[int,int]似乎被封装在另一个向量中。即:我有[[11]]而不是[11] 这个数据是由一个opencv函数cv2.approxPolyDP在我给它输入一个“轮廓”后提供给我的,我需要处理它。
[[[1119 15]]
[[1125 27]]
[[1129 43]]
[[1131 62]]
[[1131 87]]
[[1141 234]]
...]
这些应该是一组我可以用来表示曲线的点,但是每个点[int,int]似乎被封装在另一个向量中。即:我有[[11]]而不是[11]
这个数据是由一个opencv函数cv2.approxPolyDP
在我给它输入一个“轮廓”后提供给我的,我需要处理它。我认为这个函数基本上给了我它认为是一组曲线的东西,但是这里每条曲线只包含一个点[int],这是没有意义的。只有一个点的曲线不是曲线,而是一个点
在这种情况下,有没有办法将[[int]]转换为[int]呢?这可能不是最佳解决方案,但您可以这样做:
import numpy as np
# example
a = np.array( [ [[1119, 15]], [[1125, 27]], [[1129, 43]] ] )
# convert
a = np.array( [ x[0] for x in a ] )
print a
[[1119 15]
[1125 27]
[1129 43]]
编辑:
import numpy as np
a = np.array( [ [[1119, 15]], [[1125, 27]], [[1129, 143]] ] )
size = len(a)
a = a.reshape([size,2])
print a
[[1119 15]
[1125 27]
[1129 43]]
可能这不是最佳解决方案,但您可以这样做:
import numpy as np
# example
a = np.array( [ [[1119, 15]], [[1125, 27]], [[1129, 43]] ] )
# convert
a = np.array( [ x[0] for x in a ] )
print a
[[1119 15]
[1125 27]
[1129 43]]
编辑:
import numpy as np
a = np.array( [ [[1119, 15]], [[1125, 27]], [[1129, 143]] ] )
size = len(a)
a = a.reshape([size,2])
print a
[[1119 15]
[1125 27]
[1129 43]]
看看这个阵列的形状。它可能是
(n,1,2)
将其重塑为(n,2)
<代码>x。重塑(-1,2)
是一个方便的快捷方式,可以节省您确定n
的工作挤压
也可以去除奇异维度。看看这个数组的形状。它可能是(n,1,2)
将其重塑为(n,2)
<代码>x。重塑(-1,2)
是一个方便的快捷方式,可以节省您确定n
的工作squence
也可以去除奇异维度。您可以检查approxPolyDP中的第二个参数是否太大。
请注意,以下代码并不总是使其变小:
epsilon = 0.1*arcLength(contour,True)
polygon = approxPolyDP(contour, epsilon, True)
当轮廓边缘有噪声时,arcLength返回的轮廓弧长可能非常大,这在乘以0.1后会产生一个非常大的ε,从而使approxPolyDP将整个轮廓简化为一个点。您可以检查approxPolyDP中的第二个参数是否太大。 请注意,以下代码并不总是使其变小:
epsilon = 0.1*arcLength(contour,True)
polygon = approxPolyDP(contour, epsilon, True)
当轮廓边缘有噪声时,arcLength返回的轮廓弧长可能非常大,这在乘以0.1后会产生一个非常大的ε,从而使approxPolyDP将整个轮廓简化为一个点。您可能正在寻找。您可能正在寻找。