하나의 IPython 노트북 셀에 여러 이미지를 표시 하시겠습니까?
여러 이미지 (NumPy 배열로로드 됨)가있는 경우 하나의 IPython 노트북 셀에 어떻게 표시 할 수 있습니까?
하나의 이미지 plt.imshow(ima)
를 표시 하는 데 사용할 수 있다는 것을 알고 있지만 한 번에 여러 개를 표시하고 싶습니다.
나는 시도했다 :
for ima in images:
display(Image(ima))
하지만 깨진 이미지 링크가 나타납니다.
짧은 대답:
plt.figure()
셀에 둘 이상의 그림을 원하는 경우 새 그림을 만들려면 호출하십시오 .
for ima in images:
plt.figure()
plt.imshow(ima)
그러나 다음과의 혼동을 명확히하기 위해 Image
:
IPython.display.Image
배열 데이터가 아닌 이미지 파일 표시 용 입니다. Image와 함께 numpy 배열을 표시하려면 먼저 파일 형식으로 변환해야합니다 (PIL에서 가장 쉬움).
from io import BytesIO
import PIL
from IPython.display import display, Image
def display_img_array(ima):
im = PIL.Image.fromarray(ima)
bio = BytesIO()
im.save(bio, format='png')
display(Image(bio.getvalue(), format='png'))
for ima in images:
display_img_array(ima)
노트북 모두에 접근 설명.
이것은 더 쉽고 작동합니다.
from IPython.display import Image
from IPython.display import display
x = Image(filename='1.png')
y = Image(filename='2.png')
display(x, y)
수평 레이아웃
짧은 대답
plt.figure(figsize=(20,10))
columns = 5
for i, image in enumerate(images):
plt.subplot(len(images) / columns + 1, columns, i + 1)
plt.imshow(image)
긴 대답
import glob
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline
images = []
for img_path in glob.glob('images/*.jpg'):
images.append(mpimg.imread(img_path))
plt.figure(figsize=(20,10))
columns = 5
for i, image in enumerate(images):
plt.subplot(len(images) / columns + 1, columns, i + 1)
plt.imshow(image)
디스플레이 및 HTML 기능을 사용하여 하나의 IPython 노트북 셀에 여러 이미지를 표시 할 수 있습니다. 다음과 같이 html img 태그 세트를 문자열로 생성해야합니다.
from IPython.display import Image, HTML, display
from glob import glob
imagesList=''.join( ["<img style='width: 120px; margin: 0px; float: left; border: 1px solid black;' src='%s' />" % str(s)
for s in sorted(glob('yourimage*.png')) ])
display(HTML(imagesList))
http://nbviewer.ipython.org/github/PBrockmann/Dodecahedron 에서 사용 예를 참조하십시오.
새 이미지가 이전 셀에서 변경된 경우 새 이미지를 보려면 브라우저를 새로 고쳐야 할 수 있습니다 (Shift +로드).
from matplotlib.pyplot import figure, imshow, axis
from matplotlib.image import imread
mypath='.'
hSize = 5
wSize = 5
col = 4
def showImagesMatrix(list_of_files, col=10):
fig = figure( figsize=(wSize, hSize))
number_of_files = len(list_of_files)
row = number_of_files/col
if (number_of_files%col != 0):
row += 1
for i in range(number_of_files):
a=fig.add_subplot(row,col,i+1)
image = imread(mypath+'/'+list_of_files[i])
imshow(image,cmap='Greys_r')
axis('off')
showImagesMatrix(listOfImages,col)
@Michael 답변을 기반으로
어떻게 든이 질문과 관련이 있으며 (해결하려고 할 때이 답변으로 안내되었으므로)을 호출 할 때 전체 파일 경로를 입력하기 만하면 비슷한 문제를 해결할 수 Image()
있습니다. 제 경우에는 목록에 저장된 다른 폴더 경로에서 임의의 이미지를 선택하여 your_folder
표시해야했습니다.
import random, os
for i in range(len(your_folder)):
ra1 = "../"+your_folder[i]+"/"+random.choice(os.listdir(your_folder[i]))
image = Image(ra1)
display(image)
If you don't mind an additional dependency here is a two liner using scikit-image:
from skimage.util import montage
plt.imshow(montage(np.array(images), multichannel=True))
Set multichannel=True
for color images and multichannel=False
for grayscale images.
based on @ChaosPredictor answer
from matplotlib.pyplot import figure, imshow, axis
from matplotlib.image import imread
def showImagesMatrix(list_of_files, col=10, wSize=5, hSize=5, mypath='.'):
fig = figure(figsize=(wSize, hSize))
number_of_files = len(list_of_files)
row = number_of_files / col
if (number_of_files % col != 0):
row += 1
for i in range(number_of_files):
a=fig.add_subplot(row, col, i + 1)
image = imread(mypath + '/' + list_of_files[i])
imshow(image, cmap='Greys_r')
axis('off')
then
from pathlib import Path
p = Path('.')
num_images = 30
list_of_image_paths = [str(x) for x in list(p.glob('../input/train/images/*'))[:num_images]]
showImagesMatrix(list_of_image_paths)
# or with named args
showImagesMatrix(list_of_image_paths, wSize=20, hSize=10, col=5)
The answers in this thread helped me: Combine several images horizontally with Python
The problem of using matplotlib was the displayed images' definition was really bad. I adapted one of the answers there to my needs:
The following code displays the images concatenated horizontaly in a jupyter notebook. Notice the commented line with the code to save the image if you'd like that.
import numpy as np
import PIL
from IPython.display import display
list_im = ['Test1.jpg', 'Test2.jpg', 'Test3.jpg']
imgs = [ PIL.Image.open(i) for i in list_im ]
# pick the image which is the smallest, and resize the others to match it (can be arbitrary image shape here)
min_shape = sorted( [(np.sum(i.size), i.size ) for i in imgs])[0][1]
imgs_comb = np.hstack( (np.asarray( i.resize(min_shape) ) for i in imgs ) )
# save that beautiful picture
imgs_comb = PIL.Image.fromarray( imgs_comb)
#imgs_comb.save( 'combo.jpg' )
display(imgs_comb)
ReferenceURL : https://stackoverflow.com/questions/19471814/display-multiple-images-in-one-ipython-notebook-cell
'development' 카테고리의 다른 글
내부에 2 색 입자가있는 수정 구슬을 그리는 방법 (0) | 2020.12.31 |
---|---|
Swift : 레이블 또는 textView에 HTML 데이터 표시 (0) | 2020.12.31 |
명령 줄에서 JSON 파일을 어떻게 예쁘게 인쇄 할 수 있습니까? (0) | 2020.12.31 |
Swift UIView 배경색 불투명도 (0) | 2020.12.31 |
PKCS12 내보내기 중에 OpenSSL이 " '화면'을 임의 상태로로드 중"과 함께 중단됨 (0) | 2020.12.31 |