Нарисуйте три изображения горизонтально в python - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь нарисовать три изображения с субтитрами над ними, но сейчас ничего не отображается.

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('kids.tif')

# Averaged environment
avg_blur = cv2.blur(img,(5,5))
# Gaussian filter
gauss_blur = cv2.GaussianBlur(img,(0,0),5)
# Median filter
median_blur = cv2.medianBlur(img,5)

f, axarr = plt.subplots(nrows=1,ncols=3)
axarr[0].imshow(img)
axarr[1].imshow(avg_blur)
axarr[2].imshow(gauss_blur)

"""
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(avg_blur),plt.title('Averaged environment')
plt.xticks([]), plt.yticks([])
plt.show()
"""

1 Ответ

1 голос
/ 09 октября 2019

Решение

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
%config InlineBackend.figure_format = 'svg' # 'svg', 'retina'
plt.style.use('seaborn-white')

# Make dummy data for the image
a = np.arange(25**2).reshape(25,25)

# Show subplots | shape: (1,3) 
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(12,4))
for i, ax in enumerate(axs.flatten()):
    plt.sca(ax)
    plt.imshow(a**(i+1), cmap=plt.cm.jet)
    #plt.colorbar()
    plt.title('Image: {}'.format(i+1))

#plt.tight_layout()
plt.suptitle('Overall Title')
plt.show()

Выход :
enter image description here

Код, аналогичный вашей реализации

Проще установить текущую ось plt.sca(ax), а затем построить график так, как будто у вас есть только один подзаговор, с которым нужно иметь дело. Это позволяет легко модифицировать ваш код и, при необходимости, быстро перейти в цикл.

f, axarr = plt.subplots(nrows=1,ncols=3)
plt.sca(axarr[0]); 
plt.imshow(img); plt.title('title 1')
plt.sca(axarr[1]); 
plt.imshow(avg_blur); plt.title('title 2')
plt.sca(axarr[2]); 
plt.imshow(gauss_blur); plt.title('title 3')
plt.show()
...