我在numpy向量中有数据,如下所示:
[[[1119 15]]
[[1125 27]]
[[1129 43]]
[[1131 62]]
[[1131 87]]
[[1141 234]]
...]
这些应该是我可以用来表示曲线的一组点,但是每个点[int,int]似乎都被封装在另一个向量中。 I.E。:我有[[1 1]]而不是[1 1]。
这个数据是在我给它一个“轮廓”之后用opencv函数cv2.approxPolyDP
给我的,我需要使用它。我认为这个函数基本上给了我它认为是一组曲线的东西,但是这里每条曲线只包含一个点[int int]并不是真的有意义。具有一个点的曲线不是曲线,它是一个点。
在这种情况下,有没有办法将[[int int]]转换为[int int]?
答案 0 :(得分:3)
看看这个数组的形状。它可能是(n, 1, 2)
。
reshape
它到(n,2)
。 x.reshape(-1,2)
是一个方便的快捷方式,为您节省了确定n
的工作。 squeeze
也可以摆脱单一维度。
答案 1 :(得分:2)
可能它不是最佳解决方案,但您可以这样做:
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]]
答案 2 :(得分:0)
您可以检查 approxPolyDP 中的第二个参数是否太大。 请注意,以下代码不会一直变小:
input {
background-color: #FFF;
}
input[type=password]:focus,
input[type=text]:focus,
input[type=email]:focus {
background-color: #f1f1f1;
}
当轮廓边缘变得嘈杂时,由 arcLength 返回的轮廓的弧长可能非常大,在乘以0.1后产生仍然非常大的epsilon因此使 approxPolyDP 将整个轮廓简化为一个单点。