我有一个文本文件,其中的几行定义了几个多边形,如下所示:

x1,y1,x2,y2,x3,y3,x4,y4
x1,y1,x2,y2,x3,y3,x4,y4
.
.
.

etc

我想将它们读入一个数字数组,其中一个轴的形状与多边形数相同(即.Box),其他人则喜欢:

[x_min,y_min],[x_min,y_max],[x_max,y_max],[x_max,y_min]

其中x_min是最小x坐标,x_max是最大坐标,依此类推.

我可以通过以下方式读取并获得最大和最小值:

boxes_x = np.loadtxt(label_path,usecols=np.arange(0,8,2),dtype=int,delimiter=",")
boxes_y = np.loadtxt(label_path,usecols=np.arange(1,8,2),dtype=int,delimiter=",")

 x_max = boxes_x[:].max(axis=1)
 y_max = boxes_y[:].max(axis=1)
 x_min = boxes_x[:].min(axis=1)
 y_min = boxes_y[:].min(axis=1) 

但事实证明,将它们塑造成正确的形状,即[num_box,4,2]是困难的.

做这件事最好的方法是什么?

推荐答案

一次将文件读入boxes:

boxes = np.loadtxt(label_path, dtype=int,delimiter=",")

假设boxes表示4个条目(多边形):

array([[15, 10, 20, 31,  6, 28, 23,  3],
       [30, 24,  7, 13, 24,  4, 29, 20],
       [ 1,  7,  0, 14,  2, 11,  6, 24],
       [15, 18,  7,  7,  1,  1, 21, 13]])

分别找出xy余弦的minmax:

x_min, x_max = boxes[:, ::2].min(1), boxes[:, ::2].max(1)
y_min, y_max = boxes[:, 1::2].min(1), boxes[:, 1::2].max(1)

构建所需 struct 和形状的输出数组:

out_boxes = np.dstack([x_min, y_min, x_min, y_max, 
                       x_max, y_max, x_max, y_min]).reshape(-1, 4, 2)

示例输出:

array([[[ 6,  3],
        [ 6, 31],
        [23, 31],
        [23,  3]],

       [[ 7,  4],
        [ 7, 24],
        [30, 24],
        [30,  4]],

       [[ 0,  7],
        [ 0, 24],
        [ 6, 24],
        [ 6,  7]],

       [[ 1,  1],
        [ 1, 18],
        [21, 18],
        [21,  1]]])

out_boxes.shape
(4, 4, 2)

Python相关问答推荐

Pandas 在最近的日期合并,考虑到破产

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

从numpy数组和参数创建收件箱

发生异常:TclMessage命令名称无效.!listbox"

我如何根据前一个连续数字改变一串数字?

根据列值添加时区

从Windows Python脚本在WSL上运行Linux应用程序

如何在达到end_time时自动将状态字段从1更改为0

基于行条件计算(pandas)

如何使用OpenGL使球体遵循Python中的八样路径?

巨 Python :逆向猜谜游戏

如何求相邻对序列中元素 Select 的最小代价

递归函数修饰器

Python Mercury离线安装

获取PANDA GROUP BY转换中的组的名称

查找查找表中存在的列值组合

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

极点:在固定点扩展窗口

将索引表转换为Numy数组