261

我想使用IPython 笔记本作为交互式分析我使用 BiopythonGenomeDiagram模块制作的一些基因组图表的一种方式。虽然有大量关于如何matplotlib在 IPython 笔记本中使用内联图形的文档,但 GenomeDiagram 使用 ReportLab 工具包,我认为 IPython 中的内联图形不支持该工具包。

然而,我在想,解决这个问题的一种方法是将绘图/基因组图写到一个文件中,然后打开内联图像,这将具有相同的结果,如下所示:

gd_diagram.write("test.png", "PNG")
display(file="test.png")

但是,我无法弄清楚如何做到这一点 - 或者知道它是否可能。那么有谁知道图像是否可以在 IPython 中打开/显示?

4

14 回答 14

440

感谢这篇文章,您可以执行以下操作:

from IPython.display import Image
Image(filename='test.png') 

官方文档

于 2012-08-07T22:37:17.960 回答
270

如果您尝试在循环中以这种方式显示 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))
于 2016-01-28T12:20:52.350 回答
44

请注意,到目前为止发布的解决方案仅适用于 png 和 jpg!

如果您希望在不导入更多库的情况下更轻松,或者您想在 Ipython Notebook 中显示动画或非动画 GIF 文件。将要显示它的行转换为降价并使用这个漂亮的简短技巧!

![alt text](test.gif "Title")
于 2016-02-10T10:55:18.183 回答
31

.jpg这将在 Jupyter 中导入并显示图像(在 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
于 2018-01-10T23:32:28.383 回答
19

您可以在降价部分的 html 代码中使用:示例:

 <img src="https://www.tensorflow.org/images/colab_logo_32px.png" />
于 2020-04-11T11:52:01.647 回答
19

如果您想有效地显示大量图像,我建议使用IPyPlot 包

import ipyplot

ipyplot.plot_images(images_array, max_images=20, img_width=150)

在此处输入图像描述

该包中还有一些其他有用的功能,您可以在交互式选项卡(每个标签/类的单独选项卡)中显示图像,这对所有 ML 分类任务非常有帮助。

在此处输入图像描述

于 2020-05-04T13:08:02.603 回答
12

感谢这个页面,当上面的建议没有时,我发现这很有效:

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()))
于 2016-05-05T22:06:32.083 回答
12

使用标准 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()
于 2019-02-18T10:18:56.727 回答
6
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 \UXXXXXXXXXX escape

于 2020-07-19T21:02:52.530 回答
3

如果您希望将图像从本地主机嵌入到 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 中选择正确的图像类型。

于 2021-08-14T19:31:15.227 回答
2

从图像数组内联绘制的另一个选项可能是:

import IPython
def showimg(a):
    IPython.display.display(PIL.Image.fromarray(a))

其中 a 是一个数组

a.shape
(720, 1280, 3)
于 2020-08-01T14:03:34.830 回答
0

与 Jupyter (iPython) 一起使用GenomeDiagram时,显示图像的最简单方法是将 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"))

[见笔记本]

于 2017-06-29T13:37:37.677 回答
0

另一个选择是:

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()
于 2021-06-01T02:54:50.997 回答
0

这是解决方案,但它会打开正在等待的新窗口

cv2.imshow('test',image)
cv2.waitKey()
cv2.destroyAllWindows()
于 2021-12-01T06:06:47.723 回答