Gdybym wykonać następujące polecenie:Jak wyświetlać obrazy z rzędu przy użyciu ekranu IPython?
for file in files:
display(Image(filename=os.path.join(folder,file)))
uzyskać listę obrazów w kolumnie:
Jak umieścić je w rzędzie (poziomo)?
Gdybym wykonać następujące polecenie:Jak wyświetlać obrazy z rzędu przy użyciu ekranu IPython?
for file in files:
display(Image(filename=os.path.join(folder,file)))
uzyskać listę obrazów w kolumnie:
Jak umieścić je w rzędzie (poziomo)?
Ten pracował dla mnie:
from matplotlib.pyplot import figure, imshow, axis
from matplotlib.image import imread
def showImagesHorizontally(list_of_files):
fig = figure()
number_of_files = len(list_of_files)
for i in range(number_of_files):
a=fig.add_subplot(1,number_of_files,i+1)
image = imread(list_of_files[i])
imshow(image,cmap='Greys_r')
axis('off')
Myślę, że będziesz musiał wykonać figurkę z podziałem i przypisać każdą figurę do jednego z wątków. Coś jak:
import matplotlib.pyplot as plt
f,ax = plt.subplots(1,5)
for i in range(5):
ax[i].imshow(yourimage)
plt.show() # or display.display(plt.gcf()) if you prefer
Można również użyć HTML:
from IPython.display import display, HTML
def make_html(folder, image):
return '<img src="{}" style="display:inline;margin:1px"/>'
.format(os.path.join(folder, image))
display(HTML(''.join(make_html(f, x)) for x in files))
W moim przypadku, przez ustawienie marginesu będzie naprawić nie-wyrównanie (i IMHO dają lepsze wyniki).
To jest poprawa odpowiedzi AkiRoss. Daje to większą elastyczność w sposobie wyświetlania i pozwala uniknąć powtarzania funkcji dla każdego wiersza poprzez wyświetlanie w formacie siatki.
import matplotlib.pyplot as plt
def grid_display(list_of_images, list_of_titles=[], no_of_columns=2, figsize=(10,10)):
fig = plt.figure(figsize=figsize)
column = 0
for i in range(len(list_of_images)):
column += 1
# check for end of column and create a new figure
if column == no_of_columns+1:
fig = plt.figure(figsize=figsize)
column = 1
fig.add_subplot(1, no_of_columns, column)
plt.imshow(list_of_images[i])
plt.axis('off')
if len(list_of_titles) >= len(list_of_images):
plt.title(list_of_titles[i])
Parametry:
list_of_images
- wykaz zawierający wszystkie obrazy, które chcesz wyświetlić.list_of_titles
- lista zawierająca wszystkie tytuły obrazu w tej samej kolejności.no_of_columns
- liczba kolumn w siatce.figsize
- wielkość każdego rzędu, aby zapobiec zmiażdżeniu. (horizontal_size, vertical_size)
.przykład:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("files/tiger_monkey.jpg")
grey_img = cv2.imread("files/tiger_monkey_grey.png")
img_b, img_g, img_r = cv2.split(img)
grey_img_b, grey_img_g, grey_img_r = cv2.split(grey_img)
combi_one = cv2.merge((img_b, grey_img_g, img_r))
combi_two = cv2.merge((grey_img_b, grey_img_g, img_r))
combi_three = cv2.merge((img_b, img_g, grey_img_r))
combi_four = cv2.merge((grey_img_b, img_g, img_r))
combi_five = cv2.merge((grey_img_b, img_g, grey_img_r))
combi_six = cv2.merge((img_b, grey_img_g, grey_img_r))
titles = ["combi_one",
"combi_two",
"combi_three",
"combi_four",
"combi_five",
"combi_six"]
images = [combi_one,
combi_two,
combi_three,
combi_four,
combi_five,
combi_six]
images = [cv2.cvtColor(image, cv2.COLOR_BGR2RGB) for image in images]
grid_display(images, titles, 3, (10,10))
Oryginalne obrazy:
Może powinieneś dodać skąd pochodzi HTML. Po przejściu przez google'a myślę, że odnosisz się do tego [modułu HTML] (https://pypi.python.org/pypi/html) lub do [HTML.py] (http://www.decalage.info/en/python/html). Pierwszy daje mi błąd podczas próby instalacji pod python3.6, a ten drugi jest dla mnie zbyt egzotyczny (tj. Nie na pipy). – Toby
Ahh, a teraz znalazłem to, co faktycznie miałeś na myśli: 'od IPython.core.display import HTML' – Toby
@Dobrze, że masz rację, tego nie zauważyłeś. Naprawiony. – AkiRoss