ฉันจะแสดงรูปภาพจากไฟล์ใน Jupyter Notebook ได้อย่างไร


190

ฉันต้องการใช้โน้ตบุ๊ก IPythonเป็นวิธีการวิเคราะห์แผนภูมิจีโนมแบบโต้ตอบที่ฉันทำกับGenomeDiagramโมดูลของ Biopython ในขณะที่มีเอกสารมากมายเกี่ยวกับวิธีใช้matplotlibเพื่อรับกราฟแบบอินไลน์ในสมุดบันทึก IPython GenomeDiagram ใช้ชุดเครื่องมือ ReportLab ซึ่งฉันไม่คิดว่าสนับสนุนกราฟแบบอินไลน์ใน IPython

อย่างไรก็ตามฉันคิดว่าวิธีหนึ่งที่จะเขียนไดอะแกรมพล็อต / จีโนมลงในไฟล์แล้วเปิดภาพอินไลน์ซึ่งจะมีผลแบบเดียวกันกับสิ่งนี้:

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

อย่างไรก็ตามฉันไม่สามารถหาวิธีการทำเช่นนี้หรือรู้ว่าเป็นไปได้ ดังนั้นใครจะรู้ว่าภาพสามารถเปิด / แสดงใน IPython ได้หรือไม่?

คำตอบ:


335

ด้วยความอนุเคราะห์จากโพสต์นี้คุณสามารถทำสิ่งต่อไปนี้:

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

( เอกสารอย่างเป็นทางการ )


ควรใช้ API สาธารณะโดยไม่ต้องเข้าถึงภายใน: from IPython.display import Imageควรทำงานตั้งแต่ 0.13
tomyun

65
สิ่งนี้จะไม่แสดงภาพหากอยู่ในลูป
muon

6
คนส่วนใหญ่ต้องการคำตอบของ DrMcCleod
AturSams

3
สิ่งนี้ใช้ได้สำหรับฉันเท่านั้นหากฉันส่งรูปภาพ (filename = 'test.png') เพื่อแสดงตามที่แนะนำในกระทู้ด้านล่าง: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong

1
ในกรณีที่คุณต้องการให้รูปภาพแสดงในโหมดการนำเสนอภาพนิ่ง (ที่คุณเรียกใช้jupyter nbconvert mynotebook.ipynb --to slides --post serve) เส้นทางรูปภาพควรเริ่มต้นด้วย/เพื่อให้เป็นเส้นทางที่แน่นอนจากรูทเว็บเช่น![alt text](/test.jpg "Some Title")
ccpizza

215

หากคุณพยายามที่จะแสดงภาพด้วยวิธีนี้ภายในวงคุณจะต้องล้อมรอบตัวสร้างภาพในวิธีการแสดงผล

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))

1
ทำไม? (อย่าบอกฉันว่าไม่เช่นนั้นจะใช้งานไม่ได้โปรดอธิบายว่าเพราะเหตุใดการเรียก "แสดง" นี้เป็นสิ่งจำเป็นในการวนซ้ำ แต่ไม่ใช่ถ้าคุณแยกย้ายภาพเดียว)
กริช

10
เนื่องจาก IPython Notebook จะแสดงเฉพาะค่าส่งคืนล่าสุดในเซลล์ดังนั้นเมื่อใดก็ตามที่คุณมีเอาต์พุตสองรายการจากเซลล์เดียวกันคุณจะต้องใช้วิธีการ 'display' ดูคำถามนี้เพิ่มเติม
DrMcCleod

1
คุณคือฮีโร่ของฉัน - ฉันค้นหามันมาสองวันแล้ว
ZaxR

1
มันเยี่ยมมาก ฉันจะทำให้ภาพถัดไปแทนที่ภาพที่มีอยู่ได้อย่างไรเช่นเอฟเฟกต์ภาพเคลื่อนไหวเมื่อภาพเปลี่ยนแปลงตลอดเวลา
blissweb

2
ฉันสงสัยว่าเราจะเรียงภาพอย่างไร ตัวอย่างเช่นการแสดงกลุ่มภาพ 4x4
gmagno

31

หมายเหตุจนถึงตอนนี้โซลูชั่นที่โพสต์แล้วจะใช้งานได้กับ png และ jpg เท่านั้น

หากคุณต้องการให้ง่ายยิ่งขึ้นโดยไม่ต้องนำเข้าไลบรารีเพิ่มเติมหรือคุณต้องการแสดงไฟล์ GIF แบบเคลื่อนไหวหรือไม่เคลื่อนไหวใน Ipython Notebook ของคุณ แปลงบรรทัดที่คุณต้องการแสดงให้เป็น markdown และใช้แฮ็คสั้นที่ดี!

![alt text](test.gif "Title")

2
ใส่รูปภาพในโฟลเดอร์เดียวกับสมุดบันทึก Jupyter หรือแทนที่จะเป็น "test.gif" ใช้ "ญาติ / เส้นทาง / test.gif"
Philipp Schwarz

23

สิ่งนี้จะนำเข้าและแสดง.jpgภาพใน Jupyter (ทดสอบกับ Python 2.7 ในสภาพแวดล้อม Anaconda)

from IPython.display import display
from PIL import Image


path="/path/to/image.jpg"
display(Image.open(path))

คุณอาจต้องติดตั้ง PIL

ในอนาคอนดาโดยการพิมพ์

conda install pillow

8

มารยาทของนี้หน้าฉันพบนี้ทำงานเมื่อข้อเสนอแนะดังกล่าวข้างต้นไม่ได้:

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()))

4

คุณสามารถใช้ในรหัส html ในส่วน markdown: ตัวอย่าง:

 <img src="https://www.tensorflow.org/images/colab_logo_32px.png" />

2

รุ่น Python3 ที่ทำความสะอาดซึ่งใช้มาตรฐาน numpy, matplotlib และ PIL รวมคำตอบสำหรับการเปิดจาก 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()

2

หากคุณต้องการแสดงภาพจำนวนมากอย่างมีประสิทธิภาพฉันแนะนำให้ใช้แพ็คเกจ IPyPlot

import ipyplot

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

ป้อนคำอธิบายรูปภาพที่นี่

มีฟังก์ชั่นที่มีประโยชน์อื่น ๆ ในแพ็คเกจซึ่งคุณสามารถแสดงภาพในแท็บแบบโต้ตอบ (แท็บแยกต่างหากสำหรับแต่ละเลเบล / คลาส) ซึ่งมีประโยชน์มากสำหรับงานการจำแนกประเภท ML ทั้งหมด

ป้อนคำอธิบายรูปภาพที่นี่


0

เมื่อใช้GenomeDiagramกับ Jupyter (iPython) วิธีที่ง่ายที่สุดในการแสดงภาพคือการแปลง GenomeDiagram เป็นภาพ PNG สิ่งนี้สามารถห่อได้โดยใช้ IPython.display.Image object เพื่อให้แสดงในโน้ตบุ๊ก

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"))

[ดูสมุดบันทึก]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.