#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).