生成包含元组的2D numpy数组

时间:2015-02-28 23:13:24

标签: python arrays numpy interpolation

我想生成一个填充了元组的2D numpy数组。每个方块表示一个像素,该像素与具有元组的另一个2D坐标相关。 我只知道几对像素/元组。 所以我的数组必须插入这些点,并且必须在某种程度上是线性的。 我已经开始这样做了:

rows, cols : nb of rows and columns that the 2D array should have
maxx, maxy : maximum of the x and y real coordinates. Their range is [0:maxx] and [0:maxy]
interpolation = [((row1,col1),(x1,y1)),((row2,col2),(x2,y2))]
X = (rows-1-np.mgrid[0:rows,0:cols][0])/(rows-1)*maxx
Y = np.mgrid[0:rows,0:cols][1]/(cols-1)*maxy
return np.vstack(([X.T], [Y.T])).T

但是网格中没有元组,并且这对夫妇没有正确地插入坐标。实际上,元组是网格上的圆心,如下所示:calibration grid for opencv 而且我知道所有圈子的真实坐标。我的目标是拥有一个矩阵,其中包含图像像素的所有实际坐标,以便制作一个3d扫描仪:-) 有人有想法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

你真的想要tuples,还是只想要一个3d数组?你可以使用'元组制作一个二维数组。作为元素,但这是一个结构化数组。看起来更像是想要一个形状为(rows, cols, 2)的数组?

整数师可能会咬你。

In [282]: rows, cols = 5.,6.  # make float
In [283]: maxx, maxy = 80.,100.
In [284]: X = (rows-1-np.mgrid[0:rows,0:cols][0])/(rows-1)*maxx
In [285]: Y = np.mgrid[0:rows,0:cols][1]/(cols-1)*maxy
In [288]: np.vstack(([X.T],[Y.T]))  
Out[288]: 
array([[[  80.,   60.,   40.,   20.,    0.],
        [  80.,   60.,   40.,   20.,    0.],
        [  80.,   60.,   40.,   20.,    0.],
        [  80.,   60.,   40.,   20.,    0.],
        [  80.,   60.,   40.,   20.,    0.],
        [  80.,   60.,   40.,   20.,    0.]],

       [[   0.,    0.,    0.,    0.,    0.],
        [  20.,   20.,   20.,   20.,   20.],
        [  40.,   40.,   40.,   40.,   40.],
        [  60.,   60.,   60.,   60.,   60.],
        [  80.,   80.,   80.,   80.,   80.],
        [ 100.,  100.,  100.,  100.,  100.]]])

我离开了最后的.T因为(2,6,5)显示得更紧凑。 np.array([X,Y]).transpose([1,2,0])应与您的vstack完全相同。

这是你想要的吗?

mgrid可以使用j参数进行插值:

In [307]: Y,X=np.mgrid[0:100:6j,80:0:5j]
In [308]: np.array([X,Y])

np.linspace也很方便。另请参阅ogridmeshgrid