python - 计算numpy数组的边界框

标签 python numpy

我正在为一个简单的问题而苦苦挣扎。我有一个 numpy 形式的数组:

[[[ 1152.07507324   430.84799194]
  [ 4107.82910156   413.95199585]
  [ 4127.64941406  2872.32006836]
  [ 1191.71643066  2906.11206055]]]

我想计算边界框,也就是说,我想要最左边、最上面、最右边和最下面的点。

这应该是一个正确的解决方案

[[[ 1152.07507324   413.95199585]
  [ 4127.64941406   413.95199585]
  [ 4127.64941406  2906.11206055]
  [ 1152.07507324  2906.11206055]]]

我开发了一个讨厌的函数来解决这个问题,但我对它非常不满意,因为它不是真正的 pythonic/numpyic

def bounding_box(iterable):
    minimum_x = min(iterable[0], key=lambda x:x[0])[0]
    maximum_x = max(iterable[0], key=lambda x:x[0])[0]
    minimum_y = min(iterable[0], key=lambda x:x[1])[1]
    maximum_y = max(iterable[0], key=lambda x:x[1])[1]

    return numpy.array([[(minimum_x, minimum_y), (maximum_x, minimum_y), (maximum_x, maximum_y), (minimum_x, maximum_y)]], dtype=numpy.float32)

您是否知道如何优化上述函数,也许使用 numpy 内置函数?

最佳答案

使用 numpy.minnumpy.max 内置函数:

def bounding_box(iterable):
    min_x, min_y = numpy.min(iterable[0], axis=0)
    max_x, max_y = numpy.max(iterable[0], axis=0)
    return numpy.array([(min_x, min_y), (max_x, min_y), (max_x, max_y), (min_x, max_y)])

关于python - 计算numpy数组的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443688/

相关文章:

python - 我们能在列表中找到素数吗?

python - 设置 PATH 后无法打开 uiautomatorviewer

python - 使用 Python unittest 测试回调调用的正确方法是什么?

python - 什么是 numpy.fft.rfft 和 numpy.fft.irfft 及其在 MATLAB 中的等效代码

python - numpy.genfromtxt() dtype 用 AM/PM 解析日期时间字符串

python - SelectKBest 与 GaussianNB 结果不精确/一致

python通过指定索引从列表中删除项目

python - Numpy---如何同时替换数组中的某些多个元素?

python - 如何从 2D 数组制作 3D 曲面图?

python - 从 pd.DataFrame 获取列标签索引的有效方法