我正在尝试分割从输入视频流中获得的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()
条语句并不是解决方案。
谢谢您的时间!
答案 0 :(得分:1)
您只显示最后一张图像,因为您为所有图像赋予了相同的窗口名称,在这里:
cv2.imshow('cell',self.image)
如果给每个图像起一个不同的名称('cell1', 'cell2', 'cell3' etc
),则它们应同时显示。
答案 1 :(得分: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)