【问题标题】:Displaying several openCV images at the same time同时显示多个openCV图像
【发布时间】:2019-04-17 22:38:40
【问题描述】:

我正在尝试拆分从输入视频流中获得的 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() 语句不是解决方案。

感谢您的宝贵时间!

【问题讨论】:

    标签: python opencv


    【解决方案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)
    

    【讨论】:

    • 对您的答案投了赞成票,但仍需要更多声誉才能计算在内。谢谢您,先生,您刚刚教了我有关枚举和字符串格式化程序的知识。它就像一个魅力!
    【解决方案2】:

    您只显示最后一张图片,因为您在此处为所有图片指定了相同的窗口名称:

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

    如果您为每张图片指定不同的名称 ('cell1', 'cell2', 'cell3' etc),它们应该会同时显示。

    【讨论】:

    • 谢谢!我之前不知道(还在学习openCV)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多