Одновременное отображение нескольких изображений OpenCV

#python #opencv

#python #opencv

Вопрос:

Я пытаюсь разделить изображение кадра OpenCV, которое я получаю из входного видеопотока

 _, frame = cap.read()
 

в несколько меньших изображений и сохранить их в массив. Я не знаю, сколько меньших изображений у меня будет заранее, например: я мог бы разделить изображение на 4 меньших изображения или 8, 16 и т.д.

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

То, что я пробовал, очевидно, не работает, при циклическом просмотре списка отображается только последнее изображение в списке:

 # GridCells is the List that contains all the smaller images
def showCells(self):
    for c in self.GridCells:
        c.showC()
 

Где showC() -:

 def showC(self):
    cv2.imshow('cell',self.image)
 

Как уже было сказано, я не знаю, сколько меньших изображений у меня будет заранее, поэтому наличие произвольно большого количества cv2.imshow() утверждений не является решением.

Спасибо за ваше время!

Ответ №1:

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

Вы можете использовать enumerate() функцию, которая будет полезна для разных имен окон, и средство форматирования строк format() , чтобы быстро называть разные окна, используя перечислитель, переданный вашей showC функции.

 # GridCells is the List that contains all the smaller images
def showCells(self):
    for i, c in enumerate(self.GridCells):
        c.showC(i)

def showC(self, i):
    cv2.imshow("cell{}".format(i),self.image)
 

Комментарии:

1. Проголосовал за ваш ответ, но для его учета все еще требуется больше репутации. Спасибо, добрый сэр, вы только что научили меня перечислять и форматировать строки. Это сработало как шарм!

Ответ №2:

Здесь отображается только последнее изображение, потому что вы присваиваете всем своим изображениям одинаковое имя окна:

cv2.imshow('cell',self.image)

Если вы дадите каждому изображению другое имя ( 'cell1', 'cell2', 'cell3' etc ), они должны отображаться одновременно.

Комментарии:

1. Спасибо! Я не знал об этом раньше (все еще изучаю OpenCV).