【发布时间】:2011-11-12 05:07:59
【问题描述】:
有人知道 OpenCV 是否能够加载多帧 TIFF 堆栈吗? 我正在使用 OpenCV 2.2.0 和 python 2.6。
【问题讨论】:
有人知道 OpenCV 是否能够加载多帧 TIFF 堆栈吗? 我正在使用 OpenCV 2.2.0 和 python 2.6。
【问题讨论】:
虽然 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 文件视为电影文件。见班级PseudoCapture:github.com/danielballan/mr/blob/master/mr/video/tiff.py
pims。它现在位于此组织页面上:github.com/soft-matter/pims
CreateImageHeader 函数,有什么替代方案吗?
不幸的是,OpenCV 不支持 TIFF 目录,只能从多帧 TIFF 文件中读取第一帧。
【讨论】:
OpenCV 现在能够使用 imreadmulti 函数读取多页 TIFF。请参阅 OpenCV 3.4 文档中的此页面:
https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga4dd47c9ae3d55cc42286cff005825e31
【讨论】:
您可以使用名为 imreadmulti 的文件读取功能在 OpenCV 中加载多帧 tiff 文件。 这是一个例子
ret, images = cv2.imreadmulti('<path_of_tiff_files>.tiff', [], cv2.IMREAD_ANYCOLOR)
图像将是 tiff 文件中的帧列表。假设你想看第二张图片,你可以访问
img = images[1] # note 0 based indexing
【讨论】:
您还可以在 pip install TiffCapture 之后在 OpenCV 中加载和访问 tiff 堆栈。它使用 PIL 为 tiff 实现了您在 OpenCV 中期望的所有 VideoCapture 方法。
【讨论】:
#cv2.__version__ == '4.5.1'
_, frame_data = cv2.imreadmulti('my.tiff', [], cv2.IMREAD_ANYDEPTH)
#or
_, frame_data = cv2.imreadmulti('my.tiff', [], -1)
【讨论】: