小编ach*_*nnu的帖子

如何从numpy数组中提取任意一行值?

我有一个包含一些图像数据的numpy数组.我想绘制在图像上绘制的横断面的"轮廓".最简单的情况是平行于图像边缘运行的轮廓,因此如果图像阵列是imdat,则所选点处的轮廓(r,c)简单地imdat[r](水平)或imdat[:,c](垂直).

现在,我要带作为输入两个点(r1,c1)(r2,c2),卧都里面imdat.我想在连接这两点的线上绘制值的轮廓.

沿着这样一条线从numpy数组中获取值的最佳方法是什么?更一般地说,沿路径/多边形?

我之前使用过切片和索引,但是对于连续切片元素不在同一行或列中的情况,我似乎无法找到优雅的解决方案.谢谢你的帮助.

python indexing numpy slice

53
推荐指数
4
解决办法
3万
查看次数

如果图像数据形状发生变化,则使用 imshow 设置正确的限制

我有一个 3D 数组,其中前两个维度是空间的,比如 (x,y)。第三维包含点特定的信息。

print H.shape  # --> (200, 480, 640)  spatial extents (200,480)
Run Code Online (Sandbox Code Playgroud)

现在,通过在第三维中选择某个平面,我可以显示一个图像

imdat = H[:,:,100]    # shape (200, 480)
img = ax.imshow(imdat, cmap='jet',vmin=imdat.min(),vmax=imdat.max(), animated=True, aspect='equal')
Run Code Online (Sandbox Code Playgroud)

我现在想旋转立方体,以便从 (x,y) 切换到 (y,x)。

    H = np.rot90(H)          # could also use H.swapaxes(0,1) or H.transpose((1,0,2)) 
    print H.shape    # --> (480, 200, 640)
Run Code Online (Sandbox Code Playgroud)

现在,当我打电话时:

imdat = H[:,:,100]   # shape (480,200)
img.set_data(imdat)
ax.relim()
ax.autoscale_view(tight=True)
Run Code Online (Sandbox Code Playgroud)

我得到奇怪的行为。沿行的图像将数据显示到第 200 行,然后在 y 轴 (480) 的末尾处为黑色。x 轴从 0 延伸到 200,并显示旋转后的数据。现在,再旋转 90 度,图像显示正确(当然只是旋转 180 度)

在我看来,旋转数据后,轴限制(或图像范围?)或某些内容无法正确刷新。有人可以帮忙吗?

PS:为了沉迷于糟糕的黑客攻击,我还尝试在每次旋转后重新生成一个新图像(通过调用 ax.imshow),但我仍然得到相同的行为。

image matplotlib rotation reshape

5
推荐指数
1
解决办法
7076
查看次数

标签 统计

image ×1

indexing ×1

matplotlib ×1

numpy ×1

python ×1

reshape ×1

rotation ×1

slice ×1