任何人都知道OpenCV是否能够加载多帧TIFF堆栈? 我正在使用OpenCV 2.2.0和python 2.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)