【问题标题】:Can I load a multi-frame TIFF through OpenCV?我可以通过 OpenCV 加载多帧 TIFF 吗?
【发布时间】:2011-11-12 05:07:59
【问题描述】:

有人知道 OpenCV 是否能够加载多帧 TIFF 堆栈吗? 我正在使用 OpenCV 2.2.0 和 python 2.6。

【问题讨论】:

    标签: python image opencv


    【解决方案1】:

    虽然 OpenCV 无法打开多帧 TIFF 文件,但您可以使用 PIL 打开图像,然后将数据传递给 OpenCV。我还不能让它与新的“cv2”命名空间一起工作

    tiff = Image.open('sample.tif')
    try:
        while 1:
            # Convert PIL image to OpenCV
            image = cv.CreateImageHeader(tiff.size, cv.IPL_DEPTH_8U, 1)
            cv.SetData(image, tiff.tostring()) # It's "tostring" and not "toString()"!
            # Do whatever you're going to do with OpenCV data
            tiff.seek(tiff.tell()+1)
    except EOFError:
        pass
    

    【讨论】:

    • 谢谢。万一其他人关心,我让它在cv2 工作。此外,我创建了一个模拟cv2 捕获对象行为的类,您可以将多帧 TIFF 文件视为电影文件。见班级PseudoCapturegithub.com/danielballan/mr/blob/master/mr/video/tiff.py
    • @Dan Allan 我很感兴趣,但是这个链接现在坏了,你能提供脚本吗?
    • 我将图像阅读内容拆分到一个单独的存储库中,我称之为pims。它现在位于此组织页面上:github.com/soft-matter/pims
    • P.S.如果您对此有所帮助,请与我们联系!我希望看到更多的人使用它,提供反馈,做出改变。干杯!
    • @Corey Cole,显然在 OpenCV 3.3 中不支持 CreateImageHeader 函数,有什么替代方案吗?
    【解决方案2】:

    不幸的是,OpenCV 不支持 TIFF 目录,只能从多帧 TIFF 文件中读取第一帧。

    【讨论】:

    【解决方案3】:

    OpenCV 现在能够使用 imreadmulti 函数读取多页 TIFF。请参阅 OpenCV 3.4 文档中的此页面:

    https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga4dd47c9ae3d55cc42286cff005825e31

    【讨论】:

      【解决方案4】:

      您可以使用名为 imreadmulti 的文件读取功能在 OpenCV 中加载多帧 tiff 文件。 这是一个例子

       ret, images = cv2.imreadmulti('<path_of_tiff_files>.tiff', [], cv2.IMREAD_ANYCOLOR)
      

      图像将是 tiff 文件中的帧列表。假设你想看第二张图片,你可以访问

      img = images[1] # note 0 based indexing
      

      【讨论】:

        【解决方案5】:

        您还可以在 pip install TiffCapture 之后在 OpenCV 中加载和访问 tiff 堆栈。它使用 PIL 为 tiff 实现了您在 OpenCV 中期望的所有 VideoCapture 方法。

        【讨论】:

          【解决方案6】:
          #cv2.__version__ == '4.5.1'
          
          _, frame_data = cv2.imreadmulti('my.tiff', [], cv2.IMREAD_ANYDEPTH)
          
          #or
          
          _, frame_data = cv2.imreadmulti('my.tiff', [], -1)
          

          【讨论】:

          • 感谢您抽出宝贵时间提供答案。!你能:- 1)编辑你的答案,以便详细回答。 2)用这个答案解释你想达到什么目的以及你想说什么。?有关更多信息,请参阅如何在帮助中心写出好的答案(如何提问:stackoverflow.com/help/how-to-answer
          猜你喜欢
          • 2012-10-10
          • 2013-12-22
          • 2022-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多