我在图像上使用函数(Python,Numpy,OpenCV3),这是我的示例输出 -
[[[539 340 897 538]]
[[533 340 877 538]]
[[280 460 346 410]]
[[292 462 353 411]]
[[540 343 798 492]]]
它的大小是(5,1,4)
我试图了解函数输出的内容如何(5,2,4)或(5,3,4)。但是我无法想到我现在使用过的任何和所有图像,它是一个列数为1的3D数组。
仅仅2D阵列是否足够且可能更有效?
答案 0 :(得分:3)
我在OpenCV Q& A上询问并得到以下回复 -
opencv是一个c ++库,python包装器是自动生成的 从一些脚本,所以在c ++中我们有:
矢量线;保持霍夫的结果。
现在不幸的是,Vec4i是Matx的后代,实际上是 一个2d的东西,所以在python中你得到:
[载体的#one
[#one为Vec4i的第一个昏暗(1,漂亮 没用,不可否认:)
[Vec4i的第二个暗淡的#one(4个元素)
再一次,我想,你只需要忍受它。
答案 1 :(得分:1)
如果你不想要额外的尺寸,因为它是1,只需使用squeeze
>>> a = np.arange(5*4).reshape(5,1,4)
>>> a
array([[[ 0, 1, 2, 3]],
[[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11]],
[[12, 13, 14, 15]],
[[16, 17, 18, 19]]])
>>> a.squeeze()
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
有时额外的轴会派上用场
a.swapaxes(1,2)
array([[[ 0],
[ 1],
[ 2],
[ 3]],
... Snip
[[16],
[17],
[18],
[19]]])
根据更新并假设需要第一个,假设不需要额外的维度,则返回相同的结果。
>>> a[0].squeeze()
array([0, 1, 2, 3])
>>> a.squeeze()[0]
array([0, 1, 2, 3])