如何解决使用 tifffile 拆分 BigTiff
我在拆分 BigTiff 时遇到问题。我最初使用此 question 中的 @Ivan 代码。由于我使用的是大于 4GB 的 .tif,因此我不得不对其进行一些修改。枕头 does not support BigTiffs。所以我最终使用了 tifffile
。代码正在运行,但图像没有被裁剪到 box
参数。我认为它必须这样做 tifffile
将图像读取为 numpy array
并且实际上没有被任何东西剪掉???
我还注意到,当这段代码运行时,我的内存即将耗尽。我尝试将数据类型分配给未分配的 8 位,这非常有帮助。我也应该压缩它吗?我不想对数据进行太多更改,因为我会对它们进行分类并且不想丢失/更改数据。
import os
from itertools import product
import tifffile
def tile(filename,dir_in,dir_out,d):
name,ext = os.path.splitext(filename)
img = tifffile.imread(os.path.join(dir_in,filename))
print(type(img))
w = img.shape[0]
h = img.shape[1]
grid = list(product(range(0,h - h % d,d),range(0,w - w % d,d)))
for i,j in grid:
box = (j,i,j + d,i + d)
out = os.path.join(dir_out,f'{name}_{i}_{j}{ext}')
img = img.clip(box)
img = img.astype('uint8')
tifffile.imsave(out,img)
tile('Orthomosaic_export_MonFeb01193821460106.tif',r'D:\ortho',r'D:\model_images',1000)
解决方法
最终将这个 answer 合并到我的代码中并最终让它运行。
import os
import tifffile
def tile(filename,dir_in,dir_out):
name,ext = os.path.splitext(filename)
img = tifffile.imread(os.path.join(dir_in,filename))
windowsize_r = 10000
windowsize_c = 10000
i = 0
for r in range(0,img.shape[0] - windowsize_r,windowsize_r):
for c in range(0,img.shape[1] - windowsize_c,windowsize_c):
window = img[r:r + windowsize_r,c:c + windowsize_c]
out = os.path.join(dir_out,f'{name}_{i}_{ext}')
tifffile.imsave(out,window)
i = i + 1
tile('Shopfield_Orthomosaic_export_MonFeb01193821460106.tif',r'D:\ortho',r'D:\model_images')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。