Python Numpy为一定范围内的X和Y值生成坐标

2024-07-05 10:07:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成一个坐标数组,它将位于图像上。 使用的图像是640x480像素的帧。我已经能够将我想要使用的所有xy点组成一个数组。我试图在这些点上绘制小圆圈,以便可视化和以后使用,所以我试图将坐标转换成可以输入OpenCV circle函数的形式。以下是我到目前为止得到的:

Ypts = np.arange(5, 480, 5)
Xpts = np.arange(5, 640, 5)

我试过用

[pts]= np.vstack([Xpts, Ypts]).T

以及

coordinate = []
for x in range(Xpts.size):
    for y in range(Ypts.size):
        coordinate.append((x, y))

如果没有成功,我得到的坐标输出是[0, 0], [0, 1], [0, 2], ...,而不是与XptsYpts值相关的点。

在较小的范围内,这是x和y阵列的示例:

Xpts = [5, 10, 15, 20, 25, 30, 35]
Ypts = [5, 10, 15]

我想得到的答案是:

Points = [[5, 5],
    [5, 10],
    [5, 15],
    [10, 5],
    [10, 10],
    [10, 15],
    [15, 5],
    [15, 10],
    ......,
    [35, 15]]

Tags: in图像coordinateforsize可视化np绘制
3条回答

您可以使用numpy的mgrid生成所有可能的组合:

>>> py, px = np.mgrid[5:480:5, 5:640:5]
>>> points = np.c_[py.ravel(), px.ravel()]
>>> points
array([[  5,   5],
       [  5,  10],
       [  5,  15],
       ..., 
       [475, 625],
       [475, 630],
       [475, 635]])

人们已经建议使用numpy.mgrid和itertools。使用它们。

然而,为了教育起见,Python为我们提供了一个强大的概念,称为“列表理解”。可以通过运行以下命令获得笛卡尔积:

[(a,b) for a in range(5, 485, 5) for b in range(5, 645, 5)]

如果不需要元组列表,请将(a,b)更改为[a,b]

您可以使用itertools.product,它基本上将返回所提供列表的所有可能组合。有关示例,请参见以下代码:

import numpy as np
import itertools

Xpts=[5, 10, 15, 20, 25, 30, 35]
Ypts=[5, 10, 15]

Points = np.array(list(itertools.product(Xpts, Ypts)))

这将返回以下信息:

array([[ 5,  5],
       [ 5, 10],
       [ 5, 15],
       [10,  5],
       [10, 10],
       [10, 15],
       [15,  5],
       [15, 10],
       [15, 15],
       [20,  5],
       [20, 10],
       [20, 15],
       [25,  5],
       [25, 10],
       [25, 15],
       [30,  5],
       [30, 10],
       [30, 15],
       [35,  5],
       [35, 10],
       [35, 15]])

相关问题 更多 >