如何在 Jupyter Notebook 中显示文件中的图像?
Posted
技术标签:
【中文标题】如何在 Jupyter Notebook 中显示文件中的图像?【英文标题】:How can I display an image from a file in Jupyter Notebook? 【发布时间】:2012-08-04 23:48:48 【问题描述】:我想使用IPython notebook 作为一种交互式分析我使用 Biopython 的GenomeDiagram
模块制作的一些基因组图表的方法。虽然有大量文档介绍如何使用 matplotlib
在 IPython 笔记本中获取内联图形,但 GenomeDiagram 使用 ReportLab 工具包,我认为 IPython 中的内联图形不支持该工具包。
然而,我在想,解决这个问题的一种方法是将绘图/基因组图写到一个文件中,然后打开内联图像,这将具有相同的结果,如下所示:
gd_diagram.write("test.png", "PNG")
display(file="test.png")
但是,我不知道如何做到这一点 - 也不知道这是否可能。那么有人知道是否可以在 IPython 中打开/显示图像吗?
【问题讨论】:
【参考方案1】:这是解决方案,但它会打开正在等待的新窗口
cv2.imshow('test',image)
cv2.waitKey()
cv2.destroyAllWindows()
【讨论】:
【参考方案2】:如果您希望将图像从本地主机嵌入到 ipython 笔记本中,您可以执行以下操作:
首先:查找当前本地路径:
# show current directory
import os
cwd = os.getcwd()
cwd
例如结果是:
'C:\\Users\\lenovo\\Tutorials'
接下来,按如下方式嵌入图片:
from IPython.display import display
from PIL import Image
path="C:\\Users\\lenovo\\Tutorials\\Data_Science\\DS images\\your_image.jpeg"
display(Image.open(path))
确保在 jpg、jpeg 或 png 中选择正确的图像类型。
【讨论】:
【参考方案3】:另一个选择是:
from matplotlib import pyplot as plt
from io import BytesIO
from PIL import Image
import Ipython
f = BytesIO()
plt.savefig(f, format='png')
Ipython.display.display(Ipython.display.Image(data=f.getvalue()))
f.close()
【讨论】:
【参考方案4】:从图像数组内联绘制的另一个选项可能是:
import IPython
def showimg(a):
IPython.display.display(PIL.Image.fromarray(a))
其中 a 是一个数组
a.shape
(720, 1280, 3)
【讨论】:
【参考方案5】:from IPython.display import Image
Image(filename =r'C:\user\path')
我已经看到了一些解决方案,有些由于原始目录而无法工作,在添加上述代码时,请记住在目录前添加'r'。这应该避免这种错误:(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
【讨论】:
【参考方案6】:如果你想有效地显示大量图像,我建议使用IPyPlot package
import ipyplot
ipyplot.plot_images(images_array, max_images=20, img_width=150)
该包中还有一些其他有用的功能,您可以在交互式选项卡中显示图像(每个标签/类的单独选项卡),这对所有 ML 分类任务非常有帮助。
【讨论】:
这在单个图像上存在一些渲染问题,无法正确放大(显示的内容不会增长到适合放大的图像)... 有趣!感谢@PiotrDabkowski 的信息!我对 html 和 CSS 很不好,所以我完全有可能把它弄得很糟糕:)。不过,您介意在 repo 中添加一个问题 -> github.com/karolzak/ipyplot【参考方案7】:您可以在 markdown 部分的 html 代码中使用: 示例:
<img src="https://www.tensorflow.org/images/colab_logo_32px.png" />
【讨论】:
简单最好!,您可以将其添加到.ipnb
markdown 部分或README.md
引用图像相对于项目目录的路径。 <img src='project_dir/docs/imgs/123.png' />
【参考方案8】:
使用标准 numpy、matplotlib 和 PIL 的更简洁的 Python3 版本。合并从 URL 打开的答案。
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
pil_im = Image.open('image.png') #Take jpg + png
## Uncomment to open from URL
#import requests
#r = requests.get('https://www.vegvesen.no/public/webkamera/kamera?id=131206')
#pil_im = Image.open(BytesIO(r.content))
im_array = np.asarray(pil_im)
plt.imshow(im_array)
plt.show()
【讨论】:
【参考方案9】:这将在 Jupyter 中导入并显示 .jpg
图像(在 Anaconda 环境中使用 Python 2.7 测试)
from IPython.display import display
from PIL import Image
path="/path/to/image.jpg"
display(Image.open(path))
你可能需要安装 PIL
在 Anaconda 中,这是通过键入来完成的
conda install pillow
【讨论】:
【参考方案10】:感谢this post,您可以执行以下操作:
from IPython.display import Image
Image(filename='test.png')
(official docs)
【讨论】:
最好使用公共 API 而不访问内部:from IPython.display import Image
应该从 0.13 开始工作。
如果在循环内则不显示图像
大多数人都希望得到 DrMcCleod 的答案。
这仅适用于我通过 Image(filename='test.png') 来显示,如以下线程中所建议的:from IPython.core.display import Image, display
display(Image(filename='test.png'))
如果您希望图像也以幻灯片演示模式显示(使用 jupyter nbconvert mynotebook.ipynb --to slides --post serve
运行),则图像路径应以 /
开头,以便它是来自网络的绝对路径根,即![alt text](/test.jpg "Some Title")
【参考方案11】:
将 GenomeDiagram
与 Jupyter (iPython) 一起使用时,显示图像的最简单方法是将 GenomeDiagram 转换为 PNG 图像。这可以使用 IPython.display.Image 对象进行包装,使其显示在笔记本中。
from Bio.Graphics import GenomeDiagram
from Bio.SeqFeature import SeqFeature, FeatureLocation
from IPython.display import display, Image
gd_diagram = GenomeDiagram.Diagram("Test diagram")
gd_track_for_features = gd_diagram.new_track(1, name="Annotated Features")
gd_feature_set = gd_track_for_features.new_set()
gd_feature_set.add_feature(SeqFeature(FeatureLocation(25, 75), strand=+1))
gd_diagram.draw(format="linear", orientation="landscape", pagesize='A4',
fragments=1, start=0, end=100)
Image(gd_diagram.write_to_string("PNG"))
[See Notebook]
【讨论】:
【参考方案12】:感谢this 页面,我发现当上面的建议不起作用时,这很有效:
import PIL.Image
from cStringIO import StringIO
import IPython.display
import numpy as np
def showarray(a, fmt='png'):
a = np.uint8(a)
f = StringIO()
PIL.Image.fromarray(a).save(f, fmt)
IPython.display.display(IPython.display.Image(data=f.getvalue()))
【讨论】:
【参考方案13】:注意,到目前为止发布的解决方案仅适用于 png 和 jpg!
如果您希望在不导入更多库的情况下更轻松,或者您想在 Ipython Notebook 中显示动画或非动画 GIF 文件。将要显示的行转换为 markdown 并使用这个漂亮的简短技巧!
![alt text](test.gif "Title")
【讨论】:
把图片和 Jupyter notebook 放在同一个文件夹,或者用“relative/path/test.gif”代替“test.gif”【参考方案14】:如果您尝试在循环中以这种方式显示 Image,则需要将 Image 构造函数包装在 display 方法中。
from IPython.display import Image, display
listOfImageNames = ['/path/to/images/1.png',
'/path/to/images/2.png']
for imageName in listOfImageNames:
display(Image(filename=imageName))
【讨论】:
为什么? (不要告诉我,否则它不起作用。请解释为什么在循环中需要对“显示”的调用,但如果只显示一张图像则不需要)。 因为 IPython Notebooks 只显示单元格中的最后一个返回值,所以当你有来自同一个单元格的两个输出时,你需要使用 'display' 方法。请参阅this question 了解更多信息。 你是我的英雄——我已经找了两天了。 这很棒。如何让下一张图片替换现有图片,例如随着时间的推移图像发生变化的动画效果? 我想知道,我们如何平铺图像?例如显示一组 4x4 的图像。以上是关于如何在 Jupyter Notebook 中显示文件中的图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jupyter Notebook 中显示文件中的图像?
如何在 Jupyter Notebook 中显示更多行数据框? [复制]
Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)
如何在 Jupyter notebook (iPython) 中并排显示 2 张图像?