如何交互式更新 matplotlib imshow() 窗口?

2023-12-08

我正在研究一些计算机视觉算法,我想展示 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()切换,但这里似乎不起作用。

Q1.连续显示 numpy 数组(实际上是 uint8 灰度图像)更新的最佳方法是什么?

Q2。是否可以使用动画功能来做到这一点,就像在动态图像示例?我想在循环内调用一个函数,因此我不知道如何使用动画函数来实现这一点。


你不需要打电话imshow每时每刻。使用对象的速度要快得多set_data method:

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

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

UPDATE:你的问题已被重大修改。在这种情况下,最好问另一个问题。下面是解决第二个问题的方法:

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何交互式更新 matplotlib imshow() 窗口? 的相关文章

随机推荐

  • 如何删除 df 命令中的标头?

    我正在尝试编写一个 bash 命令 该命令将按所有卷已使用和尝试使用的数据量对所有卷进行排序 df awk print 1 sort r k3 n Output map devfs Filesystem dev disk1s5 dev di
  • 整数序列的最佳压缩算法

    我有一个大数组 其中的整数范围大多是连续的 例如 1 100 110 160 等 所有整数都是正数 压缩这个的最佳算法是什么 我尝试了 deflate 算法 但只提供了 50 的压缩率 请注意 该算法不能是有损的 所有数字都是唯一的并且逐渐
  • 如何清除查询消息?

    如何清除查询中的消息缓冲区 实际上 我不想在查询完成后看到任何消息 考虑到这一点 我正在使用PRINT我的查询中的声明 我的查询也可能会打印一些带有 不带有的错误消息RAISEERROR 不 实际上没有办法隐藏自定义打印消息 你只能隐藏 受
  • 使用 http.Client 和 http.Transport 设置请求标头

    我有多个IP可以上网 我正在请求选择界面 在这种情况下我应该如何设置标题 tcpAddr net TCPAddr IP addrs 3 net IPNet IP Choosing ip address number 3 d net Dial
  • 返回一个Type,或者如何保存一个对象指针的类型?

    我有一个非常复杂的代码结构 但重要的部分是 典型设置 我有一个基类和两个从该基类派生的类 每个类都有自己的成员 并且没有标准构造函数 class BaseSolver class SolverA BaseSolver public std
  • 具有多值查询的 Spring 缓存抽象

    Spring Cache抽象是否支持多值查询 代替 Cacheable 书籍 公共图书 findBook ISBN isbn 想象一下这样的查询 Cacheable 书籍 公共列表 findBook 列表 isbns 支持吗 它会单独缓存集
  • 如何在异步回调中调用事件处理程序,以便在调用线程中运行

    我正在开发一个由不同应用程序使用的 VS 项目 解决方案 我的工作是重构项目并将其从使用 xxxAsync 方法更改为使用 BeginInvoke 我想出了类似于以下代码的内容 public class AsyncTestModel pri
  • 如何在 TFS 2015 的脚本中访问构建的自定义变量?

    在 Team Foundation Server 2015 的构建定义中 我使用在 变量 选项卡上定义的自定义变量 有没有什么方法可以在 PowerShell 构建步骤中访问它们 例如可以访问预定义变量 env BUILD DEFINITI
  • OpenCV 不适用于 Visual Studio

    我刚刚安装了 openCV 版本 我的计算机上有 3 00 beta 我正在尝试使用 VS2013 对其进行测试 我遵循快速入门指南 1 Windows 安装 使用预构建库 2 微软VS中的OpenCV 使用本地方法和x64 vc12库目录
  • git svn 在非标准 svn 存储库布局上指定分支和标签

    布局是 Branches Project1 Branch11 Branch1N Project2 Branch21 ProjectX not anywhere else Excluded1 Excluded2 Excluded3 Exclu
  • 为什么即使从未调用 TransactionScope.Complete() 也会提交嵌套事务?

    我正在测试嵌套事务如何工作 并发现了这种令人不安和意外的行为 using TransactionScope otx new TransactionScope using SqlConnection conn1 new SqlConnecti
  • 如何更新 Ionic Framework 中 Angular 的版本?

    我在使用 Angular 过滤器时遇到一些问题 每个人都说 是因为您没有使用 Angular 1 3 8 或更高版本 我只是通过执行以下操作来实现我的版本angular version在控制台上并且 Object full 1 3 6 ma
  • 将现有的 Android Studio 项目添加到 VSTS

    我有一个使用 Kotlin 在 Android Studio 中开发的现有 Android 项目 它尚未受到版本控制 我想将其添加到 Visual Studio Team Services 的新经典 TFVC 项目中 而不是 Git 项目中
  • 我可以通过 SQL Server 触发器调用 C# 函数吗?

    外部应用程序进入我的数据库以在 Sql 服务器表中插入行 我自己有一个网络应用程序 我想在这个表中的每个插入中 在服务器端进行一些处理 我的想法是在表上插入时创建一个触发器 然后调用适当的函数 做这个的最好方式是什么 我使用带有 LINQ
  • 允许读、写: if request.auth != null;

    我有这个警告 除非您更新安全规则 否则您的 Cloud Firestore 数据库将开始拒绝客户端请求 它说我有一天要改变它们 我对此不太了解 我尝试观看一些视频 但我无法理解 看到我可以更改日期 但更喜欢有适当的规则 到目前为止 我对我的
  • 错误:无法读取服务器:远程使用 ltk 时没有此类变量

    我正在摆弄ltk因为它提供了运行远程 GUI 的选项 但是 当尝试使用远程 GUI 时 我遇到了在本地运行 ltk 时不会遇到的问题 in package ltk user defun add current investigation f
  • 如何在dynamodb中使用自动递增主键id

    我是 dynamodb 的新手 我想在使用时自动增加 id 值putitem与 dynamodb 可以这样做吗 Answer recommended by AWS Collective 这是 DynamoDB 中的反模式 DynamoDB
  • 怎么知道是iphone还是ipad?

    我想知道用户使用iphone还是ipad 如果用户使用iphone我想打开相机 如果他使用ipad或在模拟器中运行我想打开库 怎么可能 如何查找设备的详细信息 如何通过xcode知道用户当前使用的设备 NSString deviceType
  • 如何使用 scipy.integrate 设置固定步长?

    我正在寻找一种方法来设置固定步长 以通过 Python 中的 Runge Kutta 方法解决我的初始值问题 因此 我如何才能告诉scipy integrate RK45保持其积分过程的不断更新 步长 非常感谢 Scipy integrat
  • 如何交互式更新 matplotlib imshow() 窗口?

    我正在研究一些计算机视觉算法 我想展示 numpy 数组在每个步骤中如何变化 现在有效的是 如果我有一个简单的imshow array 在我的代码末尾 窗口显示并显示最终图像 然而 我想做的是随着图像在每次迭代中的变化而更新并显示 imsh