我可以通过OpenCV加载多帧TIFF吗?

so1*_*311 8 python opencv image

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

Joh*_*our 12

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

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


Cor*_*ole 10

虽然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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你。万一其他人关心,我让它在“cv2”中工作。此外,我创建了一个类来模拟 ``cv2`` 捕获对象的行为,您可以将多帧 TIFF 文件视为电影文件。请参阅类``PseudoCapture``:https://github.com/danielballan/mr/blob/master/mr/video/tiff.py (2认同)
  • 我将图像读取内容拆分为一个单独的存储库,我称之为"pims".它现在位于此组织页面上:https://github.com/soft-matter/pims (2认同)

And*_*aev 8

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

  • OpenCV 在 3.4 版本中添加了此功能。请参阅:https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga4dd47c9ae3d55cc42286cff005825e31 (5认同)

sam*_*sam 5

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

 ret, images = cv2.imreadmulti('<path_of_tiff_files>.tiff', [], cv2.IMREAD_ANYCOLOR)
Run Code Online (Sandbox Code Playgroud)

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

img = images[1] # note 0 based indexing
Run Code Online (Sandbox Code Playgroud)