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

时间:2011-09-07 14:10:21

标签: python image opencv

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

6 个答案:

答案 0 :(得分:8)

虽然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

答案 1 :(得分:7)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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

img = images[1] # note 0 based indexing

答案 4 :(得分:0)

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

答案 5 :(得分:0)

#cv2.__version__ == '4.5.1'

_, frame_data = cv2.imreadmulti('my.tiff', [], cv2.IMREAD_ANYDEPTH)

#or

_, frame_data = cv2.imreadmulti('my.tiff', [], -1)