Как использовать субплот в этом для цикла для отображения нескольких изображений в одной фигуре? - PullRequest
1 голос
/ 05 ноября 2019

Это мой код. Я хочу отобразить несколько изображений с помощью Matplotlib subplot. Кодекс о разделении изображения на 4 части. Затем я хочу показать части изображения, но этот код показывает их одну за другой.

import cv2
from matplotlib import pyplot as plt

im = cv2.imread("D:\\joker.jpg")
imgheight=im.shape[0]
imgwidth=im.shape[1]

y1 = 0
M = imgheight//2
N = imgwidth//2

for y in range(0,imgheight,M):
    for x in range(0, imgwidth, N):
        y1 = y + M
        x1 = x + N
        tiles = im[y:y+M,x:x+N]

        # cv2.rectangle(im, (x, y), (x1, y1), (0, 255, 0))
        gg =cv2.cvtColor(tiles, cv2.COLOR_BGR2RGB)
        # cv2.imwrite("save" + str(x) + '_' + str(y)+".png",tiles)

        plt.imshow(gg)
        plt.xticks([]), plt.yticks([])
        plt.show()

1 Ответ

1 голос
/ 05 ноября 2019

Вы должны использовать команду subplot перед каждым отображением изображения. Кроме того, было бы полезно переместить plt.show() за пределы вложенного цикла.

Вот мое решение для вашего модифицированного кода:

k = 0                                                   # Initialize subplot counter
for y in range(0,imgheight,M):
    for x in range(0, imgwidth, N):
        k += 1
        y1 = y + M
        x1 = x + N
        tiles = im[y:y+M,x:x+N]
        gg =cv2.cvtColor(tiles, cv2.COLOR_BGR2RGB)
        plt.subplot(2, 2, k)                            # Address proper subplot in 2x2 array
        plt.imshow(gg)
        plt.xticks([]), plt.yticks([])
plt.show()                                              # Moved plt.show() outside the loop

Это вывод для моего стандартатестовое изображение:

Output

Надеюсь, что поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...