Can I load a multi-frame TIFF through OpenCV?

前端 未结 5 1352
春和景丽
春和景丽 2021-02-14 18:35

Anyone know if OpenCV is capable of loading a multi-frame TIFF stack? I\'m using OpenCV 2.2.0 with python 2.6.

相关标签:
5条回答
  • 2021-02-14 19:20

    You can load multi-frame tiff files in OpenCV using file read function called imreadmulti. Here is the example

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

    Images will be a list of frames in the tiff file. Suppose you want to see 2nd image, you can access as

    img = images[1] # note 0 based indexing
    
    0 讨论(0)
  • 2021-02-14 19:22

    OpenCV is now capable of reading a multi-page TIFF using the imreadmulti function. See this page from the OpenCV 3.4 documentation:

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

    0 讨论(0)
  • 2021-02-14 19:26

    You can also load and access tiff stacks in OpenCV after pip install TiffCapture. It implements all the VideoCapture methods you'd expect in OpenCV for tiffs using PIL.

    0 讨论(0)
  • 2021-02-14 19:29

    Unfortunately OpenCV does not support TIFF directories and is able to read only the first frame from multi-frame TIFF files.

    0 讨论(0)
  • 2021-02-14 19:30

    While OpenCV can't open multi-frame TIFF files, you can open the image using PIL and then pass the data on to OpenCV. I haven't yet been able to get it working with the new "cv2" namespace

    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
    
    0 讨论(0)
提交回复
热议问题