Jupyter Notebook'daki bir dosyadan nasıl resim görüntüleyebilirim?


190

Bir IPython notebook'u Biopython'un GenomeDiagrammodülüyle yaptığım bazı genom grafiklerini etkileşimli olarak analiz etmenin bir yolu olarak kullanmak istiyorum . matplotlibGrafikleri IPython not defterinde satır içi almak için nasıl kapsamlı bir dokümantasyon olsa da , GenomeDiagram IPython'da satır içi grafik için desteklendiğini düşünmediğim ReportLab araç setini kullanıyor.

Ancak, bunun bir yolunu bir dosyaya arsa / genom diyagramı yazmak ve daha sonra böyle bir şey ile aynı sonucu olacak görüntü inline açmak olacağını düşünüyordum:

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

Ancak, bunun nasıl yapılacağını anlayamıyorum - veya bunun mümkün olup olmadığını bilmiyorum. IPython'da görüntülerin açılıp açılamayacağını bilen var mı?

Yanıtlar:


335

Bu yazının izniyle aşağıdakileri yapabilirsiniz:

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

( resmi dokümanlar )


Dahili API'lere erişmeden genel API kullanmanız daha iyi olur: from IPython.display import Image0.13'ten beri çalışmalıdır.
tomyun

65
bir döngü içinde ise görüntü gösterilmez
muon

6
Çoğu insan DrMcCleod'un cevabını ister.
AturSams

3
Bu, yalnızca aşağıdaki iş parçacığında önerildiği gibi, Görüntüyü (dosyaadı = 'test.png') görüntülemem için çalışır: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong

1
Görüntünün slayt sunumu modunda da gösterilmesini istiyorsanız (hangi ile çalıştırırsanız jupyter nbconvert mynotebook.ipynb --to slides --post serve), görüntü yolu /, web kökünden mutlak bir yol olacak şekilde ![alt text](/test.jpg "Some Title")
başlamalıdır

215

Bir resmi bir döngü içinde bu şekilde görüntülemeye çalışıyorsanız, Görüntü yapıcısını bir görüntüleme yöntemine sarmanız gerekir.

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
Neden? (Aksi takdirde işe yaramadığını söyleme. Lütfen bu 'görüntüleme' çağrısının neden bir döngüde gerekli olduğunu açıklayın, ancak sadece bir görüntüyü dispaly ederseniz açıklamayın).
Kris

10
IPython Notebook'lar bir hücredeki yalnızca son dönüş değerini gösterdiğinden, aynı hücreden iki çıkışınız olduğunda 'display' yöntemini kullanmanız gerekir. Daha fazla bilgi için bu soruya bakın .
DrMcCleod

1
Sen benim kahramanımsın - Bunu iki gündür arıyordum.
ZaxR

1
Bu harika. Görüntü zaman içinde değiştikçe, animasyonlu bir efekt gibi, bir sonraki görüntünün var olan görüntünün yerini nasıl alabilirim?
blissweb

2
Merak ediyordum, görüntüleri nasıl döşeyebiliriz? Örneğin 4x4 bir grup resim göstermek için.
gmagno

31

Not, şimdiye kadar gönderilen çözümler sadece png ve jpg için çalışır!

Başka kütüphaneleri içe aktarmadan daha da kolaylaşmak istiyorsanız veya Ipython Dizüstü Bilgisayarınızda animasyonlu veya animasyonlu olmayan bir GIF Dosyası görüntülemek istiyorsanız. İşaretlemek için görüntülemek istediğiniz satırı dönüştürün ve bu güzel kısa kesmek kullanın!

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

2
görüntüyü Jupyter not defteri ile aynı klasöre yerleştirin veya "test.gif" yerine "relative / path / test.gif" kullanın
Philipp Schwarz

23

Bu, .jpgJupyter'de bir görüntüyü içe aktaracak ve gösterecektir (Anaconda ortamında Python 2.7 ile test edilmiştir)

from IPython.display import display
from PIL import Image


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

PIL kurmanız gerekebilir

Anaconda'da bu yazarak yapılır

conda install pillow

8

Bu sayfanın izniyle, yukarıdaki öneriler işe yaramadığında bunun işe yaradığını buldum:

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

İşaretleme bölümünde html kodunda kullanabilirsiniz: örnek:

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

2

Standart numpy, matplotlib ve PIL kullanan daha temiz bir Python3 sürümü. URL'den açılmak için cevabı birleştiriyor.

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

Çok sayıda görüntüyü verimli bir şekilde görüntülemek istiyorsanız IPyPlot paketini kullanmanızı öneririm

import ipyplot

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

resim açıklamasını buraya girin

Bu pakette, görüntüleri tüm ML sınıflandırma görevleri için çok yararlı olan etkileşimli sekmelerde (her etiket / sınıf için ayrı sekme) görüntüleyebileceğiniz başka yararlı işlevler vardır.

resim açıklamasını buraya girin


0

Kullanırken GenomeDiagramJupyter (ipython) ile, resimleri görüntülemek için en kolay yolu bir PNG görüntüsüne GenomeDiagram dönüştürerek olduğunu. Bu, not defterinde görüntülenmesi için bir IPython.display.Image nesnesi kullanılarak sarılabilir.

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

[Not Defterine Bakın]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.