Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python/numpy中,如何将包含条目[[[int]]…]的向量转换为包含条目[[int]…]的向量?_Python_Opencv_Numpy - Fatal编程技术网

在python/numpy中,如何将包含条目[[[int]]…]的向量转换为包含条目[[int]…]的向量?

在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在我给它输入一个“轮廓”后提供给我的,我需要处理它。

我有一个numpy向量中的数据,看起来像这样:

 [[[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将整个轮廓简化为一个点。

您可能正在寻找。您可能正在寻找。