为什么HoughLinesP输出3D数组而不是2D数组?

时间:2016-11-01 15:12:29

标签: python-3.x opencv numpy hough-transform opencv3.1

我在图像上使用函数(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阵列是否足够且可能更有效?

2 个答案:

答案 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])