Matplotlib imshow 和 kivy

Posted

技术标签:

【中文标题】Matplotlib imshow 和 kivy【英文标题】:Matplotlib imshow and kivy 【发布时间】:2019-01-22 09:49:31 【问题描述】:

我有一个 3D numpy 数组,代表一个 3D 断层图像 I = [i,j,k]。

我开始学习 kivy,因为我需要做一个简单的 GUI,该 GUI 包括一个用于 3D (s = [i,:,:]) 图像的每个切片的 2D 图像查看器和一个用于跨平面移动的切片器。

我通常通过 matplotlib 执行所有可视化,我认为最简单的方法是将 matplotlib 连接到 kivy。我该怎么做? 我看到另一个问题,它提出了类似的问题,但仅限于绘图功能,并且该方法似乎不适用于 imshow。 (How to get started/use matplotlib in kivy)。

有什么建议吗?

谢谢,

【问题讨论】:

【参考方案1】:

详情请参考示例。

示例

main.py

​​>
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import matplotlib.pyplot as plt
import matplotlib.image as mpimg


img = mpimg.imread('ac013.JPG')
lum_img = img[:, :, 0]
plt.imshow(lum_img, cmap="nipy_spectral")
plt.colorbar()


class TestApp(App):
    title = "Kivy Garden Matplolib & imshow()"

    def build(self):
        box = BoxLayout()
        box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
        return box


if __name__ == "__main__":
    TestApp().run()

输出

【讨论】:

您的解决方案按预期工作,谢谢。在您看来,如果我想使用“更改窗口级别”或手动 ROI 等选项对 3d 图像进行“切片”,这是一种有效的工作方式吗?或者我应该使用另一种可视化方式?

以上是关于Matplotlib imshow 和 kivy的主要内容,如果未能解决你的问题,请参考以下文章

在 python (Matplotlib) 中使用 subplot 和 imshow 时删除白色边框

Matplotlib imshow 和 kivy

使用 matplotlib.pyplot、imshow() 和 savefig() 以全分辨率绘图?

OpenCV 函数学习04-用 matplotlib 显示图像(plt.imshow)

Python matplotlib imshow

matplotlib.imshow() 实际返回啥对象?如何使用这个对象?