python - 如何以交互方式更新 matplotlib imshow() 窗口?

标签 python numpy matplotlib spyder

我正在研究一些计算机视觉算法,我想展示一个 numpy 数组在每一步中的变化。

现在可行的是,如果我的代码末尾有一个简单的 imshow(array),窗口就会显示并显示最终图像。

但是,我想做的是在每次迭代中图像更改时更新和显示 imshow 窗口。

例如,我想这样做:

import numpy as np
import matplotlib.pyplot as plt
import time

array = np.zeros( (100, 100), np.uint8 )

for i in xrange( 0, 100 ):
    for j in xrange( 0, 50 ):
        array[j, i] = 1

        #_show_updated_window_briefly_
        plt.imshow( array )
        time.sleep(0.1)

问题是这样,Matplotlib 窗口不会被激活,只有在整个计算完成后才会被激活。

原生matplotlib和pyplot我都试过了,但是结果是一样的。对于绘图命令,我找到了一个 .ion() 开关,但在这里它似乎不起作用。

第一季度。持续显示对 numpy 数组(实际上是 uint8 灰度图像)的更新的最佳方式是什么?

第二季度。是否可以使用动画功能来做到这一点,例如 dynamic image example ?我想在循环中调用一个函数,因此我不知道如何使用动画函数来实现。

最佳答案

您不需要一直调用 imshow。使用对象的 set_data 方法要快得多:

myobj = imshow(first_image)
for pixel in pixels:
    addpixel(pixel)
    myobj.set_data(segmentedimg)
    draw()

draw() 应该确保后端更新图像。

更新:您的问题已被大幅修改。在这种情况下,最好问另一个问题。这是处理您的第二个问题的一种方法:

Matplotlib 的动画只处理一个增加的维度(时间),所以你的双循环不会做。您需要将索引转换为单个索引。这是一个例子:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

nx = 150
ny = 50

fig = plt.figure()
data = np.zeros((nx, ny))
im = plt.imshow(data, cmap='gist_gray_r', vmin=0, vmax=1)

def init():
    im.set_data(np.zeros((nx, ny)))

def animate(i):
    xi = i // ny
    yi = i % ny
    data[xi, yi] = 1
    im.set_data(data)
    return im

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=nx * ny,
                               interval=50)

关于python - 如何以交互方式更新 matplotlib imshow() 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835302/

相关文章:

python - 如何在 pandas 和 matplotlib 中使用 1e7 避免轴值

python - 为什么在我的 python sqlite SELECT 结果中得到额外的逗号?

python - 如何以编程方式创建对象方法?

python - 如何组合多个numpy掩码

python-2.7 - 在 Python Probplot 中更改标记样式/颜色

python - 使用 set_fig(width/height) 调整 matplotlib 图的大小不起作用

python - etree.findall : 'OR' -lookup?

python - 如何将多列中的特定值替换为另一个数据帧的相应值?

python - 使用 numba 中的数组索引数组 (njit) : variable-dimension ndarrays

python - 在 ndarray 中查找 float