【发布时间】:2020-07-12 04:21:34
【问题描述】:
我正在创建一个 python 程序来加载 .tiff 图像,从图像中裁剪出一个选区,并将选区保存为 tiff。数据集图像很大,超过 1GB。我可以成功裁剪出我需要的内容并保存为 tiff,但新的图像文件大小比我预期和需要的要大得多。
开幕
我正在使用 tifffile 将图像作为 numpy 数组打开。 OpenCV 和 PIL 因文件大小而无法打开文件。我也尝试使用 OpenSlide,但在使用 read_region() 时遇到了其他问题。
裁剪
numpy 数组的形状为(height, width, 3),因此我使用large_image[top:bottom, left:right, :] 之类的东西进行裁剪。这按预期工作。
保存
到目前为止,使用cv2.imwrite() 已经产生了最小的文件大小,但它们仍然比应有的大得多。来自tifffile 的PIL.Image.save() 和TiffWriter 创建了更大的图像。
最佳结果:从 250MB 的文件中裁剪 13 张新图像 - 仅使用原始图像的 20% 左右 - 给我的文件总计超过 900MB。我希望总数约为 50MB。
注意:裁剪后的 .tiff 文件具有正确的尺寸。如果原始文件是200,000 x 50,000,那么裁剪后的文件就是8,000 x 3,000。此外,我无法在我的 Mac 上使用 Preview 打开原始的 250MB 图像,但是当我使用 TiffWriter 保存图像时,我可以快速打开由我的程序创建的 500MB 裁剪图像(我也可以打开使用 opencv 保存的文件) .
代码总结:
import tifffile
import cv2
import numpy as np
original_image = tifffile.imread('filepath') #original_image is a numpy array
#...calculations for top, bottom, etc...
cropped_image = original_image[top:bottom, left:right, :]
cv2.imwrite('output_filepath', cropped_image)
这3行是我使用的所有IO。
tl;dr - 尝试加载图像、裁剪并将新图像另存为 .tiff,但新文件大小比预期大得多。
【问题讨论】:
-
没有单一的“TIFF 格式”。 TIFF 可以以多种不同的方式包含图像。特别是,可以使用不同的方法压缩数据。您的输入图像很可能是使用 JPEG 或 JPEG2000 压缩的,而您正在编写的 TIFF 不是压缩的或使用无损格式压缩的。
-
为什么我在问题中看不到问号?
标签: python numpy opencv image-processing tiff