【问题标题】:bounding box from 2d numpy array [duplicate]来自二维 numpy 数组的边界框 [重复]
【发布时间】:2019-06-17 12:24:52
【问题描述】:

我正在尝试为图像中的对象检测生成一个边界框。我读取图像并生成二进制 2d numpy 数组,例如:

array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])

1 代表图像中边界框内的像素。怎样才能得到左上点的x,y坐标,然后是x,y的长度?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    检查这个简单的代码:

    import numpy as np
    
    a = np.array(
           [[0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 1, 1, 0, 0],
            [0, 0, 1, 1, 0, 0],
            [0, 0, 1, 1, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0]])
    
    x,y = np.where(a)
    top_left = x.min(), y.min()
    bottom_right = x.max(), y.max()
    

    【讨论】:

    • 我觉得应该是y,x = np.where(...
    • 您如何称呼您的坐标实际上是一个约定,如果您愿意,您也可以调用fk...
    • 如果你打算将你的变量命名为xy,反对通用的“x/y轴水平/垂直位置”约定是不正当的/适得其反。感谢回答,节省了一些时间。但是在实际存储(vert, horiz) 时引入了一个错误,即top_left 自文档到(horiz, vert) 坐标。 knick_knock_paddywhackgive_a_dog_a_bone 会是更好的选择。
    • numpy 数组以列为主。因此,第一个索引表示数组中的垂直位置,正如您在答案中所写的那样。
    • 所以我想你应该告诉 numpy 开发人员他们也选择了错误的约定,将“y”放在“x”之前,哦,还有整个数学社区,矩阵中的行应该向上而不是向下堆叠...... :)
    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2019-07-05
    • 2017-02-25
    • 2015-10-02
    • 2010-11-23
    • 2016-01-28
    相关资源
    最近更新 更多